我正在尝试连接一个BLE设备,它有一个特征是写入数据请求,另一个特征是发送带有所述数据的通知。我可以毫无问题地写入CCCD,但当我写入写入特征时,10次中有9次得到gatt状态133错误。我已经检查了属性,设置了写入类型,并在每个命令之前添加了600ms的等待时间,但似乎没有任何帮助。
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()似乎只有在两者都设置了通知时才会被调用。
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);
}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进行测试,这两款手机似乎都存在这些问题。我没有其他设备来测试这是否只是三星的问题。
发布于 2020-06-30 04:05:15
我不知道为什么会这样,但我在主活动中调用了writeDescriptor。出于某些原因,将该调用更改为readDescriptor,然后写入readDescriptor中的CCC解决了问题。我猜是线程问题吧?因此,如果其他人遇到此问题,请尝试将您的所有写入(包括writeDescriptor和writeCharacteristic)放在同一线程上。
https://stackoverflow.com/questions/62645446
复制相似问题