为什么我们可以使用BroadcastReceiver与BLE设备配对而不显示系统对话框?

时间:2019-01-10 10:54:36

标签: android bluetooth broadcastreceiver rxandroidble

我正在使用RxAndroidBle库扫描BLE设备并与之连接。我还需要与此找到的设备配对,而无需显示有关密钥配对的系统对话框。绑定机制为JustWorks

我已经按照我在下面发布的要旨(创建@dglozano)创建了BroadcastReceiver,以实现这一目标。

代码要点: https://gist.github.com/dglozano/9b0ce38a558eeca16137909bd368698c

它实际上工作得很好,但是我想了解为什么当我仅使用rxBleDevice.bluetoothDevice.createBond()时会显示Dialog,但是当我用自己的BroadcastReceiver处理它时,为什么没有。是否以某种方式注销了将处理设备BOND_STATE的普通BroadcastReceiver?为什么我的BroadcastReceiver对此有主要控制权?我很感兴趣-当我注册自己的receiver时会发生什么。

1 个答案:

答案 0 :(得分:0)

好的,我知道了。

我对这个BroadcastReceiver处理这个系统Dialog的第一印象是错误的。我们仅使用此接收器来仔细检查BOUND_STATE。与配对对话框无关,这个假设是错误的。

因此,第一个重要的事实是,只有createBond()方法是必需的。剩下的就是建立它。

最重要的事实是,这是“正当工作”配对方法。 There我们可以阅读有关BLE安全和“ Just works”的信息。您可以在这里阅读:

  

在这种方法中,TK设置为0。

TK是一个临时密钥。 现在,让我们暂时回到我们的Android createBond()方法。在文档中,我们可以阅读:

  

Android系统服务将处理必要的用户交互,以确认并完成绑定过程。

但是,如果它处理用户交互,为什么不显示对话框?当我们将这两件事结合在一起时,我们就会找到答案。当“临时密钥”值设置为0时,对于Android处理程序而言,不需要显示“配对密钥”对话框。

Bluetooth 4.0 / 4.1和Bluetooth 4.2之间有很小的变化,但它不会对此行为产生影响。您可以详细了解here

TL:DR 使用“ Just works”配对方法意味着将Temporary Key值设置为0,这意味着我们在配对过程中不需要它。 createBound()方法仅处理必要的用户交互,因此,当我们不需要配对密钥时,我们不需要与用户交互。这就是为什么未显示Dialog的原因-因为它不是必需的。