2

我正在尝试在我的 APP 中读取一些蓝牙特性。现在我有一个问题,从我的 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 数据?或者在我的应用程序端更新它?

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

4

1 回答 1

2

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

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

于 2016-09-28T08:30:18.273 回答