无法从蓝牙温度计连续获取温度值
Posted
技术标签:
【中文标题】无法从蓝牙温度计连续获取温度值【英文标题】:Couldn't get the temperature value continuously from a bluetooth thermometer 【发布时间】:2018-02-28 00:32:17 【问题描述】:我正在开发一个从蓝牙温度计获取温度的安卓应用。我按照谷歌开发者页面上的说明进行操作。
https://developer.android.com/guide/topics/connectivity/bluetooth-le.html
我可以扫描设备并连接到温度计。我使用的是来自以下 github 的完全相同的代码。
https://github.com/googlesamples/android-BluetoothLeGatt/
而不是使用心率服务和相关特征。我正在使用温度服务和特性。我在从 github 下载的以下页面上更改了这些值
android-BluetoothLeGatt/Application/src/main/java/com/example/android/bluetoothlegatt/SampleGattAttributes.java
我使用的是以下蓝牙温度计。
http://www.cooper-atkins.com/Products/Blue2/
这是我从 COOPER-ATKINS 那里得到的 API 文档。
https://drive.google.com/open?id=1eq93Qc6uy0Vv9KompukLuIUnJK4B-e-0
在第 6 页中,我突出显示了我在 github 代码中替换的服务 uuid 和特征 uuid。
我可以读取温度数据,但只能读取一次。如果温度变化我看不到温度值会在应用程序中自动刷新。我必须点击温度列表按钮才能获得最近的值。谁能建议我错过了什么或做错了什么。
如果您需要更多信息,请告诉我。
【问题讨论】:
【参考方案1】:您突出显示的特征具有读取和指示属性。
读取特征(在 Android 中调用 BluetoothGatt.readCharacteristic)仅根据定义获取该时刻的值。
您必须启用指示才能获取值的每次更新。 您可以在this SO thread 上找到如何启用通知(不是指示)。您可以替换常量值来启用指示。
【讨论】:
该代码已经在 bluetoothLeService.java 的函数 setCharacteristicNotification() 中包含启用通知。能否请您在github上查看。让我知道这是否有任何问题。descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
你还在用这条线吗?你必须改变常数。
这是我在 setCharacteristicNotification 函数中使用的--BluetoothGattDescriptor 描述符 = characteristic.getDescriptor( UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));描述符.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE); mBluetoothGatt.writeDescriptor(descriptor);
抱歉,我无法编辑我的评论。根据您的建议,我将 ENABLE_NOTIFICATION_VALUE 更改为 ENABLE_INDICATION_VALUE。但是在调试应用程序时,有时我会刷新温度值,但并非总是如此,当我尝试在没有附加任何调试器的情况下运行应用程序时,它会保持不变(第一次温度读数)
对于提出的问题,reTs给出的解决方案是完美的。 ENABLE_INDICATION_VALUE 的使用得到了预期的结果。以上是关于无法从蓝牙温度计连续获取温度值的主要内容,如果未能解决你的问题,请参考以下文章