繁体   English   中英

蓝牙低能量通知

[英]bluetooth low energy notification

我正在尝试从健康状况中读取温度值。 健康温度计服务 根据官方google ble开发页面,当我尝试通知健康温度计特性读取温度时,我尝试使用writeDescriptor写一个描述符值(客户端特征配置),根据google的GATT_INSUFFICIENT_AUTHENTICATION写回写状态5的writeDescriptor返回状态5的回调方法。 所以我评论writedescriptor的代码并尝试调用方法mBluetoothGatt.setCharacteristicNotification(特性,启用); 但onCharacteristicChanged方法从未调用过。 当我和我的ios devloper团队交谈时。 他们说他们从不写一个描述符值,他们只是将通知设置为true,他们从同一芯片获得温度值。 写一个描述符值是android开发者获取通知所必需的??? 所以最后我尝试从bluetooth.com网站运行官方蓝牙应用程序进行测试,他们只是禁用所有三个按钮通知读写??? 谢谢你,对不起我的英语

[UPDATE]
找出一些可能导致粘接问题的日志,请帮助我,如果你有任何解决方案。

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

  • 在债券状态发生巨大变化之后,这可能导致认证不足
    11-08 11:26:49.437:I / BluetoothBondStateMachine(1014):bondStateChangeCallback:状态: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

[UPDATE]
在nexus 7上升级kitkat 4.4之后。 添加两个方法
device.createBond();
device.setPairingConfirmation(true);

现在我可以阅读加密的特性。 但仍然不稳定。 但我得到了一些成功。

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

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

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

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

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

在我的情况下,问题是BluetoothGatt对象只能接受一个待处理操作。 解决方案是按顺序执行读/写操作,在请求第二次读/写操作之前等待第一次完成回调。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM