android - 蓝牙低能量通知

标签 android notifications bluetooth-lowenergy android-4.3-jelly-bean gatt

我正在尝试从健康文件中读取温度值。 health thermometer service .根据 official google ble devlopment page当我尝试通知健康温度计特征读取温度时,我尝试使用 writeDescriptor 写入描述符值(客户端特征配置),根据谷歌,writeDescriptor 返回状态 5 的回调方法是 GATT_INSUFFICIENT_AUTHENTICATION。 所以我评论了 writedescriptor 的代码并尝试调用方法 mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);但从未调用过 onCharacteristicChanged 方法。当我与我的 ios 开发团队交谈时。他们说他们从不写描述符值,他们只是将通知设置为真,然后从同一个芯片获取温度值。 Android 开发人员需要编写描述符值才能获得通知??? 所以最后我尝试从 bluetooth.com 网站运行官方蓝牙应用程序进行测试,他们只是禁用所有三个按钮通知读写??? 谢谢你,对不起我的英语

[更新]
找出一些可能导致一些绑定(bind)问题的日志,如果您有任何解决方案,请帮助我。

  • 生成的短期 key 仍记录为错误
    11-08 11:26:44.392: E/bt-smp(1014): STK 生成

  • 之后绑定(bind)状态发生显着变化,这可能会导致身份验证不足
    11-08 11:26:49.437: I/BluetoothBondStateMachine(1014): bondStateChangeCallback: Status: 0 地址: 00:16:A4:C0:FF:EE newState: 2
    11-08 11:26:49.437:D/BtGatt.btif(1014):btif_gattc_upstreams_evt:事件 9
    11-08 11:26:49.437:E/BluetoothBondStateMachine(1014):处于稳定状态,收到无效的 newState:12

[更新]
在 nexus 7 上升级 kitkat 4.4 后。添加两个方法
device.createBond();<br/> device.setPairingConfirmation(true);
现在对我有用,我可以读取加密的特征。但仍然不稳定。但我取得了一些成功。

最佳答案

是的,在 Android 中启用 BLE 通知,您必须同时调用 mBluetoothGatt.setCharacteristicNotification(characteristic, enabled) 并将合适的值写入该特性的描述符 0x2902。

我不确定你为什么会得到 GATT_INSUFFICIENT_AUTHENTICATION,这可能是由温度计的实现引起的。

编辑: 根据评论中的新信息以及提供的屏幕截图,您可能需要检查以下几点:

  1. 该特征是指示特征,不是通知特征。您写入描述符的值应该是 BluetoothGattDescriptor.ENABLE_INDICATION_VALUE,而不是 BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE。请注意,您仍然需要通过 setCharacteristicNotification() 打开指示。 (这里的术语令人困惑,但根据文档这是必要的)

  2. 对于Android上不稳定的蓝牙堆栈,尝试重启蓝牙,关闭WiFi。这将增加稳定性。 (虽然不是100%解决问题)

关于android - 蓝牙低能量通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19614715/

相关文章:

android - 错误类型3-错误: Activity 类MainActivity不存在

Android 5 ADB通知转储错误数据

android - 选项卡滑动无法正常工作

android - ConstraintLayout 中多个水平障碍的问题

android - 将 2 个 mp3 文件与 Android 的 FFmpeg 混合

android - 更新通知栏上现有通知的通知内容,如 Android 中的 Whatspp、Gmail 等

android - 显示通知时通知声音播放两次

android - 如何在奥利奥中以编程方式获取移动蓝牙MAC地址

Android/iOS - BLE - 当 BLE 设备连接时唤醒终止的应用程序

ios - 理解 iBeacon 数据 : the power field and other bytes