Android 电话(作为外围角色)不';在JustWorks配对模式下不显示配对对话框
我正在编写一个Android应用程序,它通过BLE连接到一个物理设备。Android应用程序将作为外围设备,而设备则是中心设备。设备I/O功能也设置为NOINPUTNOUTPUT(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添加到
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
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时,它是否有不同的行为