bluetooth - createBond 并不总是显示引脚对话框

标签 bluetooth bluetooth-lowenergy android-bluetooth pairing

执行 bleScan 并让用户选择设备后,我将通过 getRemoteDevice(address) 调用获取该设备。

一旦获得该BluetoothDevice 对象,我就会调用createBond()。由于 createBond() 触发异步操作,因此我让 BroadcastReceiver 监听结果,并在接收器中收到 BONDED 结果时确认设备已配对/绑定(bind)。

这是与 BT 设备绑定(bind)的非常标准的程序。

我遇到的问题是,在看似随机的条件下,内置的配对/连接对话框不会出现。

通过一些测试,我发现如果我在手机上向下滑动,长按蓝牙并单击“配对新设备”,该设备就会显示在列表中...然后我可以返回到我的应用程序,调用 createBond( ),然后出现 PIN 对话框。

这告诉我某种类型的蓝牙缓存或类似的东西存在问题。

我正在尝试确定为什么会出现这种情况,以及是否应该确保在调用 createBond 之前执行某些操作以确保出现 pin 对话框。

我可以发布相关代码,但它实际上只是一句话

bool bondInitiated = getDevice().createBond();

在调用 create bond 后,通常会有 1-2 秒的暂停,然后出现 pin 对话框。

有人可以在这里提供一些见解吗?除了调用 createBond() 之外,是否有更好的方法与 Android 的 BT 设备配对

我很乐意为用户提供一个 PIN 文本框,让他们输入 BT 设备(它是血糖仪)上显示的 PIN,然后以这种方式进行配对,但我还没有找到一种方法。

最佳答案

不幸的是,没有一种标准方法可以始终向用户显示配对对话框。这是因为配对过程取决于硬件,并且一些 OEM 已经修改了其在操作系统级别的工作方式。因此,根据所使用的硬件的不同,会有一些变化。

但是,您可能可以实现一些“技巧”来使其正常工作。看看this link因为它包含有关 bondong 过程和配对弹出窗口的详细信息。它有点过时了(3年前),但它包括以下段落:-

So if you want you can try to make the popup always appear in the foreground by doing discovering for 1 second before connecting to a device. It is a bit of a hack but it works.

关于bluetooth - createBond 并不总是显示引脚对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74821602/

相关文章:

c# - Windows 10 UWP 应用程序在启动画面后立即关闭/崩溃

windows - 关闭 Microsoft Surface Dial sleep 模式

android - ACCESS_COARSE_LOCATION 不适用于 Android 6

android - 如何在 Android 上启用/禁用蓝牙硬件初始化日志记录?

android - 三星 Android 10 BLE MTU>23 问题

bluetooth - 可以配对多少个蓝牙?

Java 长空字符串

android - 如何使用蓝牙从arduino接收串行数据?

swift - 核心蓝牙状态恢复只触发一次