11

我正在编写一个通过 BLE 连接到物理设备的 Android 应用程序。Android 应用程序将充当外围角色,而设备是中心。设备 I/O 功能也设置为 NoInputNoOutput ( ble_cmd_sm_set_parameters(0, 8, sm_io_capability_noinputnooutput))

建立连接的流程是:

  • 打开 Android 应用程序,然后通过以下方式打开蓝牙 Gatt 服务器连接bluetoothManager.openGattServer()
  • 将 BluetoothGattService 添加到该 BluetoothGattServer 中(这里该服务包含一些具有属性指示和通知、权限读取和写入的特性)
  • 添加所有服务后,开始发送广告
  • 触摸设备上的一个按钮,让它开始扫描外围设备。
  • 当检测到手机时,设备会向手机发送配对信号。
  • 接收到该信号,理论上,Android 设备将显示一个带有 2 个按钮 PAIR 和 CANCEL 的配对对话框以确认配对(这是 JustWorks 模式而不是 Passkey,因为它不需要我们使用键盘输入密钥)。
  • 然而,在几款 Android 设备上进行测试后,有些设备具有该对话框,例如 Moto Z (Android 6)、Moto G (Android 6),而其他设备则没有,例如 Galaxy S7、Galaxy Tab S2(均为 Android 7)。我使用WireShark捕获和分析这些设备的蓝牙包,并实现前者有Sent Pairing Request: AuthReqSecure Connection Flag = 1后者有Secure Connection Flag = 0(有关安全连接标志的更多信息,请参阅蓝牙配对第4部分

从 Android Studio logcat 读取输出时(如果是三星设备),我得到这些日志: 01-31 15:21:53.322 D/BluetoothAdapter: isSecureModeEnabled 01-31 15:21:53.322 D/BtConfig.SecureMode: isSecureModeOn:false 01-31 15:21:53.325 D/BluetoothAdapter: STATE_ON 01-31 15:21:53.325 D/BluetoothLeAdvertiser: start advertising 不确定 SecureMode 是否与我们提到的 SecureConnection 相同。

据我了解,该配对是带有 JustWorks 模式的 BLE 安全连接。但似乎并非所有 Android 设备都支持它(您能确认我的想法吗?)。或者,我们如何强制后面的设备也有配对对话框?

一件重要的事情是,我有一个具有相同连接流程和相同物理设备的 iOS 应用程序,它确实显示了配对对话框。

4

0 回答 0