Android BLE 读取 Gatt 特性

标签 android bluetooth-lowenergy gatt characteristics

我正在尝试在我的应用程序中读取一些蓝牙特性。 现在我有一个问题,在我的 Gatt 服务器的特征发生更改后该怎么办。起初,我尝试使用线程一次又一次地重新触发对特征的读取,如下所示:

new Thread(new Runnable() {
    @Override
    public void run() {
        int[] newData = new int[30];
        while(true){
            try{
                for(int i=0;i<newData.length;i++){
                    newData[i] = 0;
                }
                BluetoothGatt tmpGatt = refExtDataClass.getRefBluetoothGatt();
                tmpGatt.readCharacteristic(characteristic);

                byte[] value = characteristic.getValue();

                for(int i=0;i<newData.length;i++){
                    newData[i] = value[i];
                }
                refExtDataClass.setNmData(newData);
            }catch(Exception e){
                break;
            }
        }
    }
}).start();

但问题是,数据似乎在某一时刻已损坏(就像我总是从 MCU 端将相同的数据写入特征中一样)。

允许这样读取BLE数据吗?有什么建议的方法可以一直读取BLE数据吗?或者在我的应用程序端更新它?

如果您需要任何其他代码,请告诉我。

最佳答案

读取 GATT 特性是一个异步操作。在您收到onCharacteristicRead之前,结果不可用。回调。

无论如何,您应该将 GATT 服务器配置为发送 notifications当有新数据要发送时,而不是一直轮询。

关于Android BLE 读取 Gatt 特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39741741/

相关文章:

Android - AppWidget pendingintent 不触发

android - 如何在 Google Play 商店的应用程序页面上启用下载(计数)图标

android - canvas.drawRect 如何绘制矩形

android - BLE 连接总是调用断开连接的操作(GATT 配置文件)

android - 在android中的TextView中显示大字符串

security - 如何在 BlueZ 上启动 BLE 配对

android - 使用 BLE Android 4.3 如何编写特性?

ios - 如何断开已连接的蓝牙设备

android - Android 6.0.1 中的 Gatt 缓存

android - 如何通过蓝牙低功耗 (BLE) 链路发送数据?