如果通过调用gatt.writeDescriptor驱动配对并且配对成功,则Android配对对话框不会消失

问题描述

如果我明确调用以下代码来绑定到设备:

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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...