首页 文章

BLE与作为外围设备的Android东西配对

提问于
浏览
1

我在原型中使用Android Things 1.0.4,它充当BLE外围设备:广告服务和运行GATT服务器 .

在尝试绑定Android Things板(Raspberry Pi 3)和智能手机时,我在BLE配对过程中遇到了一个问题 .

由于设备没有显示,我使用BluetoothConfigManager设置:

IoCapability = BluetoothConfigManager.IO_CAPABILITY_NONE

每次都会导致错误 AUTH_FAILED .

代替,

IoCapability = BluetoothConfigManager.IO_CAPABILITY_OUT

记录配对键并提示智能手机在配对期间输入它,但会导致 REMOVED 错误 .

问题:

  • Android的外围角色是否能够处理BLE配对?

  • 在应用程序的代码中是否还需要实现更多功能来复制完整的Android逻辑?

这是source code of the Android Things app to test BLE pairing and bonding

从Android Things特定元素中剥离的相同代码在作为外围设备(服务器)的Android手机上运行时成功完成BLE配对和绑定,并且作为中心(客户端)安装Android设备或iPhone .

1 回答

  • 0

    一般来说,如果您在配对之前尝试读取加密的GATT特性(自动触发配对逻辑),则会导致读取请求( AUTH_FAIL )返回GATT错误137 . 这是因为在蓝牙堆栈发送响应之前,设备没有足够的时间完成绑定设置 . Retying the read request again generally succeeds.

    我没有使用iOS客户端设备对此进行测试,但对于连接到Android(Things)外围设备的Android客户端,它确实适用 . 因此,我会建议一些事情:

    • 让客户端(移动)设备明确启动配对,Android Things应该只对 BluetoothPairingCallback 中的这些传入请求作出反应 . 这使得移动设备基于所报告的IoT设备的能力来决定配对类型 .

    • 将配对流程与GATT流程分开 . 与发现的设备分开配对,不做任何尝试读取特征 . 这往往是避免计时问题的最佳方法 .

    关于功能选择,这取决于您的设备 . 根据我的经验,如果选择 IO_CAPABILITY_NONE ,这将导致 onPairingInitiated() 内的 PAIRING_VARIANT_CONSENT ,并且一旦调用了 finishPairing() ,配对操作就会成功 . 如果您调整功能,则应准备好任何数量的变体,要求您显示移动设备输入的PIN . 我还没有亲自测试过这些路径 .

相关问题