# InputInfo 硬件特性检测使用示例

## 概述
InputInfo 类现在提供了完整的硬件特性检测功能，包括输入设备信息和各种硬件特性支持（USB、指纹、NFC、GPS等）。

## 新增功能

### 硬件特性检测方法（12个）

1. **USB 相关**
   - `hasUsbHostSupport()` - USB Host 模式支持
   - `hasUsbAccessorySupport()` - USB 配件模式支持

2. **生物识别**
   - `hasFingerprintSensor()` - 指纹识别器

3. **传感器**
   - `hasInfraredSensor()` - 红外线传感器（遥控器功能）
   - `hasUwbSupport()` - UWB 超宽带支持

4. **NFC 相关**
   - `hasNfcSupport()` - NFC 近场通信支持
   - `hasNfcHostCardEmulation()` - NFC 主机卡模拟
   - `hasNfcHostCardEmulationOffHost()` - NFC 离线主机卡模拟
   - `hasSecureNfcSupport()` - 安全 NFC 支持

5. **定位相关**
   - `hasGpsSupport()` - GPS 定位支持
   - `hasNetworkLocationSupport()` - 网络定位支持
   - `hasLocationSupport()` - 任何定位服务支持

6. **综合方法**
   - `getHardwareFeatures()` - 获取所有硬件特性支持信息

## 使用方法

### 1. 初始化
```kotlin
import com.xyzshell.andinfo.AndInfo

// 在 Application 或 Activity 中初始化
AndInfo.init(applicationContext)

// 获取 InputInfo 实例
val inputInfo = AndInfo.instance.input
```

### 2. USB 功能检测

#### USB Host 支持
```kotlin
// 检查是否支持 USB Host 模式
val hasUsbHost = inputInfo.hasUsbHostSupport()
println("USB Host 支持: ${if (hasUsbHost) "是" else "否"}")

// USB Host 允许 Android 设备连接：
// - USB 键盘
// - USB 鼠标
// - USB 存储设备
// - USB 游戏手柄
// - USB 打印机等
```

#### USB 配件模式
```kotlin
// 检查是否支持 USB 配件模式
val hasUsbAccessory = inputInfo.hasUsbAccessorySupport()
println("USB 配件模式: ${if (hasUsbAccessory) "是" else "否"}")

// USB 配件模式允许 Android 设备作为配件连接到：
// - 汽车娱乐系统
// - 音频设备
// - 医疗设备等
```

### 3. 指纹识别检测

```kotlin
// 检查是否有指纹识别器
val hasFingerprint = inputInfo.hasFingerprintSensor()
println("指纹识别器: ${if (hasFingerprint) "有" else "无"}")

// 用于判断设备是否支持指纹解锁、指纹支付等功能
if (hasFingerprint) {
    // 可以使用 BiometricPrompt API 进行指纹认证
    println("设备支持指纹认证功能")
}
```

### 4. 红外线传感器检测

```kotlin
// 检查是否有红外线传感器（IR Blaster）
val hasInfrared = inputInfo.hasInfraredSensor()
println("红外线传感器: ${if (hasInfrared) "有" else "无"}")

// 红外线传感器可用于：
// - 遥控电视
// - 遥控空调
// - 遥控机顶盒等
if (hasInfrared) {
    println("设备可以作为万能遥控器使用")
}
```

### 5. UWB 超宽带支持检测

```kotlin
// 检查是否支持 UWB（Ultra-Wideband）
val hasUwb = inputInfo.hasUwbSupport()
println("UWB 支持: ${if (hasUwb) "是" else "否"}")

// UWB 技术用于：
// - 精确室内定位（厘米级）
// - 数字车钥匙
// - 查找设备（类似 AirTag）
// - 设备间高速数据传输
if (hasUwb) {
    println("设备支持精确定位和数字车钥匙功能")
}
```

### 6. NFC 功能检测

#### 基本 NFC 支持
```kotlin
// 检查是否支持 NFC
val hasNfc = inputInfo.hasNfcSupport()
println("NFC 支持: ${if (hasNfc) "是" else "否"}")

// NFC 用于：
// - 移动支付（Apple Pay、Google Pay等）
// - 读取 NFC 标签
// - 点对点数据传输
// - 公交卡模拟
```

#### NFC 主机卡模拟（HCE）
```kotlin
// 检查是否支持 NFC HCE
val hasNfcHce = inputInfo.hasNfcHostCardEmulation()
println("NFC HCE 支持: ${if (hasNfcHce) "是" else "否"}")

// HCE 允许应用模拟 NFC 卡片，无需物理安全元素
// 用于：
// - 虚拟公交卡
// - 虚拟门禁卡
// - 虚拟会员卡
```

#### NFC 离线主机卡模拟
```kotlin
// 检查是否支持离线 HCE
val hasNfcOffHost = inputInfo.hasNfcHostCardEmulationOffHost()
println("NFC 离线 HCE: ${if (hasNfcOffHost) "是" else "否"}")

// 允许在设备离线时进行 NFC 交易
```

#### 安全 NFC
```kotlin
// 检查是否支持安全 NFC
val hasSecureNfc = inputInfo.hasSecureNfcSupport()
println("安全 NFC: ${if (hasSecureNfc) "是" else "否"}")

// 安全 NFC 使用安全元素（Secure Element）
// 提供更高的安全性，用于：
// - 金融级支付
// - 敏感数据交换
```

### 7. GPS 定位检测

#### GPS 支持
```kotlin
// 检查是否支持 GPS
val hasGps = inputInfo.hasGpsSupport()
println("GPS 支持: ${if (hasGps) "是" else "否"}")

// GPS 提供卫星定位功能
// 用于：
// - 导航
// - 位置追踪
// - 地理标记
```

#### 网络定位
```kotlin
// 检查是否支持网络定位
val hasNetworkLocation = inputInfo.hasNetworkLocationSupport()
println("网络定位: ${if (hasNetworkLocation) "是" else "否"}")

// 网络定位使用：
// - Wi-Fi 定位
// - 基站定位
// 比 GPS 更省电但精度较低
```

#### 任何定位服务
```kotlin
// 检查是否支持任何定位服务
val hasLocation = inputInfo.hasLocationSupport()
println("定位服务: ${if (hasLocation) "是" else "否"}")

// 综合检测设备是否有定位能力
```

### 8. 获取所有硬件特性

```kotlin
// 一次性获取所有硬件特性支持信息
val features = inputInfo.getHardwareFeatures()

println("=== 硬件特性汇总 ===")
println("USB Host: ${if (features.usbHost) "✓" else "✗"}")
println("USB 配件: ${if (features.usbAccessory) "✓" else "✗"}")
println("指纹识别: ${if (features.fingerprint) "✓" else "✗"}")
println("红外线: ${if (features.infrared) "✓" else "✗"}")
println("UWB: ${if (features.uwb) "✓" else "✗"}")
println("NFC: ${if (features.nfc) "✓" else "✗"}")
println("NFC HCE: ${if (features.nfcHce) "✓" else "✗"}")
println("NFC 离线: ${if (features.nfcHceOffHost) "✓" else "✗"}")
println("安全 NFC: ${if (features.secureNfc) "✓" else "✗"}")
println("GPS: ${if (features.gps) "✓" else "✗"}")
println("网络定位: ${if (features.networkLocation) "✓" else "✗"}")
println("定位服务: ${if (features.location) "✓" else "✗"}")
```

### 9. 输入设备信息（原有功能）

```kotlin
// 获取所有输入设备
val devices = inputInfo.getInputDevices()
println("输入设备数量: ${devices.size}")

devices.forEach { device ->
    println("--- ${device.name} ---")
    println("ID: ${device.id}")
    println("类型: ${when {
        device.sources and InputDevice.SOURCE_KEYBOARD != 0 -> "键盘"
        device.sources and InputDevice.SOURCE_MOUSE != 0 -> "鼠标"
        device.sources and InputDevice.SOURCE_TOUCHSCREEN != 0 -> "触摸屏"
        device.sources and InputDevice.SOURCE_GAMEPAD != 0 -> "游戏手柄"
        else -> "其他"
    }}")
    println("虚拟设备: ${device.isVirtual}")
    println("外部设备: ${device.isExternal}")
    println("有震动: ${device.hasVibrator}")
    println("有麦克风: ${device.hasMicrophone}")
    println()
}
```

## HardwareFeatures 数据类

```kotlin
data class HardwareFeatures(
    val usbHost: Boolean,              // USB Host 支持
    val usbAccessory: Boolean,         // USB 配件支持
    val fingerprint: Boolean,          // 指纹识别器
    val infrared: Boolean,             // 红外线传感器
    val uwb: Boolean,                  // UWB 支持
    val nfc: Boolean,                  // NFC 支持
    val nfcHce: Boolean,               // NFC 主机卡模拟
    val nfcHceOffHost: Boolean,        // NFC 离线主机卡模拟
    val secureNfc: Boolean,            // 安全 NFC
    val gps: Boolean,                  // GPS 支持
    val networkLocation: Boolean,      // 网络定位支持
    val location: Boolean              // 任何定位支持
)
```

## 典型应用场景

### 1. 功能适配检查
```kotlin
fun checkDeviceCapabilities(): DeviceCapabilities {
    val inputInfo = AndInfo.instance.input
    
    return DeviceCapabilities(
        canUseUsbAccessories = inputInfo.hasUsbHostSupport(),
        canUseFingerprint = inputInfo.hasFingerprintSensor(),
        canControlTv = inputInfo.hasInfraredSensor(),
        canUseNfcPayment = inputInfo.hasNfcSupport(),
        canUseDigitalKey = inputInfo.hasUwbSupport(),
        canUseGps = inputInfo.hasGpsSupport()
    )
}
```

### 2. 功能引导
```kotlin
fun showFeatureTips() {
    val inputInfo = AndInfo.instance.input
    
    if (inputInfo.hasInfraredSensor()) {
        showTip("您的设备支持红外遥控功能，可以控制电视、空调等设备")
    }
    
    if (inputInfo.hasUwbSupport()) {
        showTip("您的设备支持 UWB，可以使用数字车钥匙功能")
    }
    
    if (inputInfo.hasNfcSupport()) {
        showTip("您的设备支持 NFC，可以使用移动支付和刷卡功能")
    }
}
```

### 3. 支付功能检查
```kotlin
fun canUseNfcPayment(): Boolean {
    val inputInfo = AndInfo.instance.input
    
    // 检查基本 NFC 支持
    if (!inputInfo.hasNfcSupport()) {
        return false
    }
    
    // 检查 HCE 支持（用于虚拟卡片）
    val hasHce = inputInfo.hasNfcHostCardEmulation()
    
    // 检查安全 NFC（用于金融级支付）
    val hasSecureNfc = inputInfo.hasSecureNfcSupport()
    
    return hasHce || hasSecureNfc
}
```

### 4. 定位功能检查
```kotlin
fun getBestLocationMethod(): String {
    val inputInfo = AndInfo.instance.input
    
    return when {
        inputInfo.hasGpsSupport() -> "GPS（高精度）"
        inputInfo.hasNetworkLocationSupport() -> "网络定位（省电）"
        inputInfo.hasLocationSupport() -> "基础定位"
        else -> "不支持定位"
    }
}
```

### 5. 设备档案生成
```kotlin
fun generateDeviceProfile(): String {
    val inputInfo = AndInfo.instance.input
    val features = inputInfo.getHardwareFeatures()
    
    return buildString {
        appendLine("=== 设备功能档案 ===")
        appendLine()
        appendLine("📱 连接性")
        appendLine("USB Host: ${if (features.usbHost) "✓" else "✗"}")
        appendLine("USB 配件: ${if (features.usbAccessory) "✓" else "✗"}")
        appendLine("NFC: ${if (features.nfc) "✓" else "✗"}")
        appendLine("UWB: ${if (features.uwb) "✓" else "✗"}")
        appendLine()
        appendLine("🔐 安全性")
        appendLine("指纹: ${if (features.fingerprint) "✓" else "✗"}")
        appendLine("安全 NFC: ${if (features.secureNfc) "✓" else "✗"}")
        appendLine()
        appendLine("📍 定位")
        appendLine("GPS: ${if (features.gps) "✓" else "✗"}")
        appendLine("网络定位: ${if (features.networkLocation) "✓" else "✗"}")
        appendLine()
        appendLine("🔌 特殊功能")
        appendLine("红外遥控: ${if (features.infrared) "✓" else "✗"}")
    }
}
```

## 示例输出

### 完整硬件特性检测结果
```
=== 硬件特性汇总 ===
USB Host: ✓
USB 配件: ✓
指纹识别: ✓
红外线: ✗
UWB: ✓
NFC: ✓
NFC HCE: ✓
NFC 离线: ✗
安全 NFC: ✓
GPS: ✓
网络定位: ✓
定位服务: ✓
```

### 高端设备示例（如 Samsung Galaxy S24 Ultra）
```
USB Host: ✓
USB 配件: ✓
指纹识别: ✓（屏下指纹）
红外线: ✗
UWB: ✓（数字车钥匙、SmartTag+ 支持）
NFC: ✓
NFC HCE: ✓
安全 NFC: ✓（Samsung Pay）
GPS: ✓
```

### 中端设备示例（如 Google Pixel 7a）
```
USB Host: ✓
USB 配件: ✓
指纹识别: ✓（屏下指纹）
红外线: ✗
UWB: ✗
NFC: ✓
NFC HCE: ✓
安全 NFC: ✗
GPS: ✓
```

### 预算设备示例
```
USB Host: ✓
USB 配件: ✓
指纹识别: ✓（侧面指纹）
红外线: ✗
UWB: ✗
NFC: ✗
NFC HCE: ✗
安全 NFC: ✗
GPS: ✓
```

## 注意事项

1. **权限要求**：
   - USB 功能不需要特殊权限
   - 指纹使用需要 `USE_BIOMETRIC` 权限
   - NFC 使用需要 `NFC` 权限
   - 定位使用需要 `ACCESS_FINE_LOCATION` 或 `ACCESS_COARSE_LOCATION` 权限

2. **版本兼容性**：
   - UWB 支持需要 Android 12+
   - 某些 NFC 功能需要 Android 4.4+

3. **设备差异**：
   - 不同品牌和型号的设备支持的功能不同
   - 某些功能可能被厂商禁用

4. **用户设置**：
   - 即使硬件支持，用户也可能在设置中禁用某些功能
   - 建议在使用前检查功能是否已启用

## 完成度

✅ **100%** - 所有请求的功能都已实现
- USB Host 支持检测 ✅
- USB 配件支持检测 ✅
- 指纹识别器检测 ✅
- 红外线传感器检测 ✅
- UWB 支持检测 ✅
- NFC 支持检测 ✅
- 安全 NFC 支持检测 ✅
- GPS 支持检测 ✅
- 完整的中文注释 ✅
- 综合查询方法 ✅

