465 lines
12 KiB
Markdown
465 lines
12 KiB
Markdown
# 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 支持检测 ✅
|
||
- 完整的中文注释 ✅
|
||
- 综合查询方法 ✅
|
||
|