如何用Kotlin应用通过Android扫描获取蓝牙加密方式信息?(无需配对连接)
如何在不配对/连接的情况下获取远程蓝牙设备的加密方式?
首先明确结论:在不配对、不连接远程蓝牙设备的前提下,Android Kotlin应用没办法直接获取到它的加密方式信息。
原因很直白:
- 蓝牙设备的加密方式属于配对或连接阶段才会协商的安全参数,这类敏感信息不会通过蓝牙扫描的广播数据包对外暴露。扫描能拿到的只是设备名称、MAC地址、UUID、广播数据这类基础信息,完全碰不到加密相关的配置细节。
- 你用到的
BluetoothDevice类本身只提供设备绑定状态、设备类型这类基础属性,没有任何API支持在未连接时查询加密方式。
结合你提到的几种加密方式,补充个对应场景的参考:
- E0:曾在蓝牙4.2及更早的BR/EDR设备中广泛使用,但4.2版本起已被官方弃用
- SAFER+:仅适用于蓝牙2.1及更早的BR/EDR设备
- AES-CCM:蓝牙4.0及以上BLE设备的标准加密方式
如果一定要做间接判断,可以试试这个思路:
- 通过设备的蓝牙版本间接推断。部分设备会在广播中携带版本信息,或者你可以通过
BluetoothDevice.getBluetoothClass()判断设备类型后结合行业常识推测:比如BLE设备(蓝牙4.0+)基本都用AES-CCM;老款BR/EDR设备(2.1及之前)可能用SAFER+;4.2之前的BR/EDR设备大概率用E0。但这只是推测,绝对不是准确结果——毕竟很多设备支持多种加密方式,最终用哪种是配对时协商出来的,没连接根本没法确定。
内容的提问来源于stack exchange,提问作者Stan Richie
相关产品推荐
相关产品推荐

