DevCheck-lib/InputInfo硬件特性检测使用示例.md
2025-12-24 14:22:29 +08:00

12 KiB
Raw Blame History

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. 初始化

import com.xyzshell.andinfo.AndInfo

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

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

2. USB 功能检测

USB Host 支持

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

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

USB 配件模式

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

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

3. 指纹识别检测

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

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

4. 红外线传感器检测

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

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

5. UWB 超宽带支持检测

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

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

6. NFC 功能检测

基本 NFC 支持

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

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

NFC 主机卡模拟HCE

// 检查是否支持 NFC HCE
val hasNfcHce = inputInfo.hasNfcHostCardEmulation()
println("NFC HCE 支持: ${if (hasNfcHce) "是" else "否"}")

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

NFC 离线主机卡模拟

// 检查是否支持离线 HCE
val hasNfcOffHost = inputInfo.hasNfcHostCardEmulationOffHost()
println("NFC 离线 HCE: ${if (hasNfcOffHost) "是" else "否"}")

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

安全 NFC

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

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

7. GPS 定位检测

GPS 支持

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

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

网络定位

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

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

任何定位服务

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

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

8. 获取所有硬件特性

// 一次性获取所有硬件特性支持信息
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. 输入设备信息(原有功能)

// 获取所有输入设备
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 数据类

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. 功能适配检查

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. 功能引导

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

3. 支付功能检查

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. 定位功能检查

fun getBestLocationMethod(): String {
    val inputInfo = AndInfo.instance.input
    
    return when {
        inputInfo.hasGpsSupport() -> "GPS高精度"
        inputInfo.hasNetworkLocationSupport() -> "网络定位(省电)"
        inputInfo.hasLocationSupport() -> "基础定位"
        else -> "不支持定位"
    }
}

5. 设备档案生成

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_LOCATIONACCESS_COARSE_LOCATION 权限
  2. 版本兼容性

    • UWB 支持需要 Android 12+
    • 某些 NFC 功能需要 Android 4.4+
  3. 设备差异

    • 不同品牌和型号的设备支持的功能不同
    • 某些功能可能被厂商禁用
  4. 用户设置

    • 即使硬件支持,用户也可能在设置中禁用某些功能
    • 建议在使用前检查功能是否已启用

完成度

100% - 所有请求的功能都已实现

  • USB Host 支持检测
  • USB 配件支持检测
  • 指纹识别器检测
  • 红外线传感器检测
  • UWB 支持检测
  • NFC 支持检测
  • 安全 NFC 支持检测
  • GPS 支持检测
  • 完整的中文注释
  • 综合查询方法