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

时间:2018-01-31 08:00:32

标签: android bluetooth bluetooth-lowenergy pairing bluetooth-peripheral

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

建立连接的流程是:

  • 打开Android应用,然后通过bluetoothManager.openGattServer()
  • 打开蓝牙Gatt服务器连接
  • 将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: AuthReq Secure Connection Flag = 1而后者有Secure Connection Flag = 0(有关安全连接标志的更多信息,请参阅{ {3}})

当从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应用程序,它确实显示了配对对话框。

0 个答案:

没有答案