我试图writeCharacteristic()
到BLE设备。
我使用Google示例应用建立连接,连接正常。我可以看到BLE服务和服务特征。
writeCharacteristic()
方法返回true,onCharacteristicWrite()
回调返回状态BluetoothGatt.GATT_SUCCESS
但设备没有发生任何事情:
我尝试了堆栈溢出的所有解决方案,没有任何帮助。
这是我的代码:
在BluetoothLeService
班级,我有sendData()
方法,获得byte[]
由于33字节的最大有效载荷,我分别发送每个命令。
public void sendData(byte[] data) {
String lService = "71387664-eb78-11e6-b006-92361f002671";
String lCharacteristic = "71387663-eb78-11e6-b006-92361f002671";
BluetoothGattService mBluetoothLeService = null;
BluetoothGattCharacteristic mBluetoothGattCharacteristic = null;
if (mBluetoothGattCharacteristic == null) {
mBluetoothGattCharacteristic = mBluetoothGatt.getService(UUID.fromString(lService)).getCharacteristic(UUID.fromString(lCharacteristic));
}
mBluetoothGattCharacteristic.setValue(data);
boolean write = mBluetoothGatt.writeCharacteristic(mBluetoothGattCharacteristic);
}
答案 0 :(得分:0)
在您的代码中,您检查特征的属性? 如果在设备上写东西,那么特征必须具有写属性或写无响应属性或写&通知财产。 因此,请检查您的代码,了解您所写的特征。
答案 1 :(得分:0)
您的代码看起来没问题,如果您已获得GATT_SUCCESS,则表示该功能已成功写入。 您还可以尝试读取此特征并检查值是否已更新。此外,可能已成功写入特性,但只有在断开与设备的连接后才会触发相应的设备功能。而且设备方面也可能存在一些错误。
答案 2 :(得分:0)
我发现了这个问题。希望我的回答能帮到别人。 问题是,我发送的byte []数组大于允许的数字(20字节)。另外,我需要在这个byte []数组中添加“\ r”,这样,BLE Devise知道它是命令的结束。 另外,我需要在onCharacteristicRead()中获得响应后创建一个队列并从中弹出。
class DataQueues {
private ArrayList<byte[]> queueArray;
private int queuSize;
protected DataQueues() {
queueArray = new ArrayList<>();
}
protected void addToQueue(byte[] bytesArr) {
queueArray.add(bytesArr);
}
protected byte[] popQueue() {
if (queueArray.size() >= 0)
return queueArray.remove(0);
else {
return null;
}
}
protected int getArrSize() {
return queueArray.size();
}
}
希望这会对某人有所帮助。