问题描述
如果我明确调用以下代码来绑定到设备:
Peripheral peripheral = peripheralList.get(peripheralUUID);
peripheral.getDevice().createBond();
bondRequest = new BondRequest(peripheralUUID,bondCallback);
我得到一个配对对话框,输入PIN,然后该对话框消失。
然后,由于设备的性质,我正在谈论以下代码:
BluetoothGattService service = gatt.getService(serviceUUID);
BluetoothGattCharacteristic characteristic = findNotifyCharacteristic(service,characteristicUUID);
gatt.setCharacteristicNotification(characteristic,true);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUIDHelper.uuidFromString(CHARACTERISTIC_NOTIFICATION_CONFIG));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
gatt.writeDescriptor(descriptor);
产生另一个配对对话框。我可以在此处输入PIN码,然后关闭Android配对对话框。内部使用logcat查看Android日志,看来这会将设备转换回BOND_NONE,然后转换为BOND_BONDING,最后转换为BOND_BONDED。一切都很好,一切都按预期进行。进行两次配对对话很烦人。
如果我采用推荐的Android方法,并在必要时让操作系统处理配对,例如我从来没有明确绑定到设备,而只是写描述符来产生配对对话框,发生以下情况:
- 我输入PIN码
- 配对“完成”,因此设备在Android设置中配对显示,并且我编写的应用程序运行良好。
- 配对对话框不会关闭,logcat中没有任何内容可以真正解释原因。我可以按取消将其关闭,并且该设备肯定已配对,一切正常。
有关该应用程序的一些注意事项:
- 是本机反应。
- 我正在使用react-native-ble-manager,上面的Java代码是从react-native-ble-manager源中提取的。
我对Android开发非常满意,可以在此处编写解决此问题所需的任何代码,并将这些更改反馈给react库。
任何人都可以提供有关我应如何处理的信息吗?我目前的理解是,这一切都应该由Android驱动并优雅地处理。
在日志中对我来说唯一突出的一行是以下消息:
2020-08-20 13:11:41.937 6184-6330/? I/BluetoothBondStateMachine: 3481F4 is bonded,wait for SDP complete to broadcast bonded intent
来自BondStateMachine.java source。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)