首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onCharacteristicWrite中的BLE网关状态133

onCharacteristicWrite中的BLE网关状态133
EN

Stack Overflow用户
提问于 2020-06-30 03:31:04
回答 1查看 173关注 0票数 1

我正在尝试连接一个BLE设备,它有一个特征是写入数据请求,另一个特征是发送带有所述数据的通知。我可以毫无问题地写入CCCD,但当我写入写入特征时,10次中有9次得到gatt状态133错误。我已经检查了属性,设置了写入类型,并在每个命令之前添加了600ms的等待时间,但似乎没有任何帮助。

代码语言:javascript
复制
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
                    super.onDescriptorWrite(gatt, descriptor, status);
                    Log.d(MY_TAG, "Wrote " + descriptor.getUuid() + " with status " + status);
                    if (status == BluetoothGatt.GATT_SUCCESS) {
                        Log.d(MY_TAG, "Write Successful");
                        enableAllNotifications();
                        try {
                            writeData(new byte[] {4, 0, 36});
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    } else {
                        Log.d(MY_TAG, "Write failed");
                    }
                }
            }; 

enableAllNotifications()只是在我这一端设置通知,因为onCharacteristicChanged()似乎只有在两者都设置了通知时才会被调用。

代码语言:javascript
复制
private void writeData(byte[] message) throws InterruptedException {
        BluetoothGattCharacteristic characteristic = mainActivity.deviceServices.get(0)
                .getCharacteristic(ActiCharacteristicUuids.WriteUUID);
        characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT);
        characteristic.setValue(message);
        TimeUnit.MILLISECONDS.sleep(600);
        bluetoothGatt.writeCharacteristic(characteristic);
    }
代码语言:javascript
复制
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        super.onCharacteristicWrite(gatt, characteristic, status);
        Log.d(MY_TAG, "Inside onCharactersiticWrite with status: " + status);
        if (status != BluetoothGatt.GATT_SUCCESS) {
             Log.d(MY_TAG, "Write failed");
             retryWrite(characteristic);
        } else {
             Log.d(MY_TAG, "Write Successful");
             gatt.readCharacteristic(characteristic);
        }
}

我不知道这是否有用,但我一直在用三星Galaxy S10+和三星Galaxy S8 Active进行测试,这两款手机似乎都存在这些问题。我没有其他设备来测试这是否只是三星的问题。

EN

回答 1

Stack Overflow用户

发布于 2020-06-30 04:05:15

我不知道为什么会这样,但我在主活动中调用了writeDescriptor。出于某些原因,将该调用更改为readDescriptor,然后写入readDescriptor中的CCC解决了问题。我猜是线程问题吧?因此,如果其他人遇到此问题,请尝试将您的所有写入(包括writeDescriptor和writeCharacteristic)放在同一线程上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62645446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档