12 KiB
12 KiB
InputInfo 硬件特性检测使用示例
概述
InputInfo 类现在提供了完整的硬件特性检测功能,包括输入设备信息和各种硬件特性支持(USB、指纹、NFC、GPS等)。
新增功能
硬件特性检测方法(12个)
-
USB 相关
hasUsbHostSupport()- USB Host 模式支持hasUsbAccessorySupport()- USB 配件模式支持
-
生物识别
hasFingerprintSensor()- 指纹识别器
-
传感器
hasInfraredSensor()- 红外线传感器(遥控器功能)hasUwbSupport()- UWB 超宽带支持
-
NFC 相关
hasNfcSupport()- NFC 近场通信支持hasNfcHostCardEmulation()- NFC 主机卡模拟hasNfcHostCardEmulationOffHost()- NFC 离线主机卡模拟hasSecureNfcSupport()- 安全 NFC 支持
-
定位相关
hasGpsSupport()- GPS 定位支持hasNetworkLocationSupport()- 网络定位支持hasLocationSupport()- 任何定位服务支持
-
综合方法
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 超宽带支持检测
// 检查是否支持 UWB(Ultra-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: ✓
注意事项
-
权限要求:
- USB 功能不需要特殊权限
- 指纹使用需要
USE_BIOMETRIC权限 - NFC 使用需要
NFC权限 - 定位使用需要
ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限
-
版本兼容性:
- UWB 支持需要 Android 12+
- 某些 NFC 功能需要 Android 4.4+
-
设备差异:
- 不同品牌和型号的设备支持的功能不同
- 某些功能可能被厂商禁用
-
用户设置:
- 即使硬件支持,用户也可能在设置中禁用某些功能
- 建议在使用前检查功能是否已启用
完成度
✅ 100% - 所有请求的功能都已实现
- USB Host 支持检测 ✅
- USB 配件支持检测 ✅
- 指纹识别器检测 ✅
- 红外线传感器检测 ✅
- UWB 支持检测 ✅
- NFC 支持检测 ✅
- 安全 NFC 支持检测 ✅
- GPS 支持检测 ✅
- 完整的中文注释 ✅
- 综合查询方法 ✅