在JustWorks配对模式下,电话(作为外围角色)不显示配对对话框

ant*_*afe 11 android bluetooth bluetooth-lowenergy bluetooth-peripheral pairing

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

建立连接的流程是:

  • 打开Android应用,然后打开蓝牙Gatt服务器连接 bluetoothManager.openGattServer()
  • 将BluetoothGattService添加到BluetoothGattServer中(此处该服务包含一些具有属性Indicate&Notify,权限读取和写入的特征)
  • 添加所有服务后,开始发送广告
  • 触摸设备上的按钮,让它开始扫描外围设备.
  • 当检测到手机时,设备会向手机发送配对信号.
  • 接收到该信号,理论上,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相同.

据我所知,配对是BLE Secure Connections,采用JustWorks模式.但似乎并非所有的Android设备都支持它(你能否确认一下我的想法?).或者,我们如何强制后一个设备也有配对对话框?

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