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

Android 电话(作为外围角色)不';在JustWorks配对模式下不显示配对对话框,android,bluetooth,bluetooth-lowenergy,pairing,bluetooth-peripheral,Android,Bluetooth,Bluetooth Lowenergy,Pairing,Bluetooth Peripheral,我正在编写一个Android应用程序,它通过BLE连接到一个物理设备。Android应用程序将作为外围设备,而设备则是中心设备。设备I/O功能也设置为NOINPUTNOUTPUT(ble\u cmd\u sm\u set\u参数(0,8,sm\u io\u功能\u NOINPUTNOUTPUT)) 建立连接的流程是: 打开Android应用程序,然后通过bluetoothManager.openGattServer()打开蓝牙Gatt服务器连接 将BluetoothGattService添加到

我正在编写一个Android应用程序,它通过BLE连接到一个物理设备。Android应用程序将作为外围设备,而设备则是中心设备。设备I/O功能也设置为NOINPUTNOUTPUT(
ble\u cmd\u sm\u set\u参数(0,8,sm\u io\u功能\u NOINPUTNOUTPUT)

建立连接的流程是:

  • 打开Android应用程序,然后通过
    bluetoothManager.openGattServer()打开蓝牙Gatt服务器连接
  • 将BluetoothGattService添加到BluetoothGattServer中(在此,该服务包含一些具有属性指示和通知、权限读写的特性)
  • 添加所有服务后,开始发送广告
  • 触摸设备上的按钮,使其开始扫描外设
  • 当检测到手机时,设备将向手机发送配对信号
  • 从理论上讲,收到该信号后,Android设备将显示一个配对对话框,其中有两个按钮配对,并取消确认配对(这是一种模式JustWorks,而不是Passkey,因为它不需要我们使用键盘输入键)
  • 然而,在几个安卓设备上进行测试后,有些设备有该对话框,如Moto Z(安卓6)、Moto G(安卓6),而其他设备没有,如Galaxy S7、Galaxy Tab S2(均为安卓7)。我使用WireShark捕获和分析这些设备的蓝牙包,并意识到前者已
    发送配对请求:AuthReq
    安全连接标志=1
    ,而后者具有
    安全连接标志=0
    (有关安全连接标志的更多信息,请参阅)
从Android Studio logcat读取输出时(如果是三星设备),我会得到以下日志:

01-31 15:21:53.322 D/蓝牙适配器:已安全删除
01-31 15:21:53.322 D/BtConfig.SecureMode:IsSecureRemodeon:false
01-31 15:21:53.325 D/蓝牙适配器:状态为ON
01-31 15:21:53.325 D/BluetoothLeAdvertiser:开始做广告
不确定SecureMode是否与我们提到的SecureConnection相同

据我所知,使用JustWorks模式,这种配对是不可恢复的安全连接。但似乎并不是所有的Android设备都支持它(你能证实我的想法吗?)。或者,我们如何强制后面的设备也有配对对话框


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

你不需要重复文章标题中的
android
标签。三星手机是根吗?如果是的话,试着禁用knox,如果不是的话,试着使用一个有根的三星设备,看看当你禁用knox时,它是否有不同的行为