# 二维码扫码功能使用说明

## 功能特点

- ✅ 使用华为 Customized View Mode 实现精美的自定义扫码界面
- ✅ 全屏沉浸式体验
- ✅ 流畅的扫描线动画
- ✅ **超简洁的 API，业务层只需一行代码**
- ✅ **内部自动处理 Activity Result，无需手动处理 onActivityResult**
- ✅ 单例模式，统一管理

## 快速开始

### 调用方式（与BLE模块完全一致）

```kotlin
import com.narutohuo.xindazhou.qrcode.factory.QRCodeManagerFactory
import com.narutohuo.xindazhou.qrcode.api.QRCodeManager

val qrCodeManager: QRCodeManager = QRCodeManagerFactory.getInstance()
qrCodeManager.scanQRCode(this) { response ->
    if (response.success) {
        // 扫码成功
        val qrCodeContent = response.data
    } else {
        // 扫码失败或取消
        val error = response.errorMessage
    }
}
```

### 完整示例

```kotlin
import com.narutohuo.xindazhou.qrcode.factory.QRCodeManagerFactory
import com.narutohuo.xindazhou.qrcode.api.QRCodeManager
import com.narutohuo.xindazhou.qrcode.model.QRCodeResponse

class MainActivity : AppCompatActivity() {
    
    private val qrCodeManager: QRCodeManager = QRCodeManagerFactory.getInstance()
    
    fun startScan() {
        qrCodeManager.scanQRCode(this) { response ->
            handleScanResult(response)
        }
    }
    
    private fun handleScanResult(response: QRCodeResponse) {
        if (response.success) {
            val content = response.data
            // 处理扫码结果
            processQRCode(content)
        } else {
            // 处理错误
            showError(response.errorMessage)
        }
    }
    
    private fun processQRCode(content: String?) {
        // 业务逻辑处理
    }
    
    private fun showError(message: String?) {
        // 显示错误
    }
}
```

**注意**：✅ 不需要实现 `onActivityResult`！内部已经自动处理了

## API 说明

### QRCodeManager 接口

```kotlin
interface QRCodeManager {
    /**
     * 扫描二维码
     * 
     * @param activity Activity上下文（必须是 FragmentActivity 或 AppCompatActivity）
     * @param callback 扫描结果回调，返回QRCodeResponse
     */
    fun scanQRCode(activity: Activity, callback: (QRCodeResponse) -> Unit)
}
```

### QRCodeResponse 响应模型

```kotlin
data class QRCodeResponse(
    val success: Boolean,           // 是否成功
    val data: String? = null,       // 二维码内容
    val errorCode: Int? = null,     // 错误码
    val errorMessage: String? = null, // 错误消息
    val timestamp: Long = System.currentTimeMillis() // 时间戳
)
```

## 注意事项

1. **Activity 类型**：必须使用 `AppCompatActivity` 或 `FragmentActivity`（内部使用 Fragment 桥接 ActivityResultLauncher）
2. **相机权限**：确保在 AndroidManifest.xml 中声明了相机权限，运行时会自动请求
3. **单例模式**：使用 Factory 获取的实例是单例，多个界面可以共享
4. **无需处理 onActivityResult**：内部已经自动处理，业务层完全不需要关心

## 界面效果

- 全屏沉浸式扫码界面
- 居中显示扫码框（280dp × 280dp）
- 四个角的装饰线条（青色 #00E5FF）
- 流畅的扫描线动画
- 半透明遮罩突出扫码区域
- 顶部返回按钮
- 底部提示文字

## 依赖说明

- 华为 HMS Scan Kit: `2.12.0.300`
- AndroidX AppCompat: `1.6.1`
- AndroidX Fragment: `1.6.2`
- AndroidX Activity: `1.8.2`
- 最低 SDK 版本: 26

## 与其他模块对比

### BLE 模块调用方式
```kotlin
import com.narutohuo.xindazhou.ble.factory.BLEServiceFactory
import com.narutohuo.xindazhou.ble.api.BLEService

val bleService: BLEService = BLEServiceFactory.create(context)
bleService.connect(device) { response ->
    // 处理结果
}
```

### 二维码模块调用方式（完全一致！）
```kotlin
import com.narutohuo.xindazhou.qrcode.factory.QRCodeManagerFactory
import com.narutohuo.xindazhou.qrcode.api.QRCodeManager

val qrCodeManager: QRCodeManager = QRCodeManagerFactory.getInstance()
qrCodeManager.scanQRCode(this) { response ->
    // 处理结果
}
```

**与BLE模块完全一致的调用方式！** 🎉
