当前位置: 首页 > 知识库问答 >
问题:

可读取Gatt特性

申奇希
2023-03-14

我试图在我的应用程序中读取一些蓝牙特性。现在我有一个问题,在我的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端将相同的数据写入特征)。

允许读取像这样的可读取数据吗?有没有什么建议的方法可以一直读取可读取的数据?还是在我的应用程序端更新?

如果你需要任何额外的代码,请告诉我。

共有1个答案

段干靖
2023-03-14

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

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

 类似资料:
  • 我试图从蓝牙LE设备(心率手镯)读取GATT特征值。其规格如下: 服务 特点 我还没有弄明白如何“阅读”规范并将其“翻译”成代码。 我需要在我的应用程序上显示设备检测到的心跳。如何解读关贸总协定的价值观?请提供一个代码示例:) 遵循我的实际源代码。 设置BLUETOOT连接 发现BLE设备并与心率监测器连接

  • 我试图读取一个特点后,关贸总协定连接和服务发现成功。但接收错误15(0x0f,GATT_INSUFFICIENT_ENCRYPTION),然后137(0x0089)在gatt回调。在此错误之后,gatt立即断开连接。 我的设备是三星S4,4.4.2。

  • 我对Java和OOP都是新手。但是,我使用notify读取一个特征,然后使用read读取回调中的多个特征。 我想知道,为什么在使用readCharacteristic(我的特征)时,只能从单个特征(除了通知的特征)中获取值。蓝牙gatt回调声明如下: 公共布尔值 (BluetoothGattCharacteristic characteristic characteristic)从相关远程设备读取

  • Gatt 是一个 Go 语言包,用来构建低功耗蓝牙外设。 具有以下功能: 作为外设——可以用于创建服务,接收信息,处理请求。 作为处理中心——可以用于扫描,连接,发现服务,并作出反映。

  • 我一直在尝试通过葡萄糖服务从一个可编程设备读取葡萄糖测量记录。我能够成功地连接到设备并读取新记录,但当我请求以前记录的列表时,我会收到状态为129的回调(“GATT_INTERNAL_ERROR”)。之后不会发生其他回调,最终传输超时。 据我所知,要检索记录,我需要向记录访问控制点特性写入请求。收到请求后,设备应通过吐出请求的记录来响应。 我的请求代码如下: 其中{0x01,0x01}枚举对应于{

  • 问题内容: 我有一个包含100行的CSV文件。 如何读取特定行? 我想读第9行或第23行等? 问题答案: 您可以使用来过滤文件,如下所示: