onCharacteristicwrite中的Android蓝牙状态133
我是Android的新手,现在正在做一个简单的应用程序,需要将一些数据写入外围设备。
实际上,三星GT-S7272C设备没有任何问题。但是当我切换到Sony LT29i时,当我尝试写入某个特性时,总会有状态133。我将给出一些简短的代码。
BluetoothGattService syncService = gatt.getService(SYNC_DATA_SERVICE);BluetoothGattCharacteristic tChar = syncService.getCharacteristic(SYNC_TIME_INPUT_CHAR);
if (tChar == null) throw new AssertionError("characteristic null when sync time!");
int diff = /*a int*/;
tChar.setValue(diff, BluetoothGattCharacteristic.FORMAT_SINT32, 0);
gatt.writeCharacteristic(tChar);
和onCharacteristicWrite函数:
@Overridepublic void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
Log.d(TAG, String.format("Sync: onCharWrite, status = %d", status));
try {
if (status != BluetoothGatt.GATT_SUCCESS) throw new AssertionError("Error on char write");
super.onCharacteristicWrite(gatt, characteristic, status);
if (characteristic.getUuid().equals(SYNC_TIME_INPUT_CHAR)) {
BluetoothGattService syncService = gatt.getService(SYNC_DATA_SERVICE);
BluetoothGattCharacteristic tChar = syncService.getCharacteristic(SYNC_HEIGHT_INPUT_CHAR);
if (tChar == null) throw new AssertionError("characteristic null when sync time!");
tChar.setValue(/*another int*/, BluetoothGattCharacteristic.FORMAT_SINT32, 0);
gatt.writeCharacteristic(tChar);
}
else if {
...
}
} catch (AssertionError e) {
...
}
写入第一个特征没有错,控制将到达onCharacteristicWrite并输入第一个if
状态为status的语句0
,这表示成功。问题是if
语句中的第二次写操作,这还将触发onCharacteristicWrite函数,但会产生一个状态133
,该状态在官方网站上找不到。然后,设备会自动断开连接。
我已经确认数据类型和偏移量都是正确的。而且因为在另一台设备上它确实工作得很好,所以我认为不同设备之间的蓝牙堆栈实现可能会有一些细微的差异,我应该做一些更棘手的事情来解决这个问题。
我一直在寻找结果。一些结果将我引导到C源代码(对不起,我将在下面发布链接,因为我没有足够的声誉来发布2个以上的链接),但是我只能发现那133
意味着GATT_ERROR在那里,它没有比只是一个133
。我还在Google网上论坛中找到了一个问题,讨论了一些熟悉的问题,但是我在这里找不到解决方案。
我有点难过,因为如果C代码有问题,即使我可以找到问题所在,我仍然无法在自己的代码中正确解决,对吗?
我希望有人以前有熟悉的经验,并可以给我一些建议。非常感谢!
链接:
C源代码:
https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-4.4.2_r1/stack/include/gatt_api.h
问题:
https://code.google.com/p/android/issues/detail?id=58381
回答:
当我尝试写入某些特征时,我也遇到了类似的问题,但是我是否记得相同的错误代码。 (它可以在某些设备上运行,而不能在其他设备上运行)。
原来是问题property
出在characteristics
和的writeType
。
由于特征可以设置值:
write without response
要么write with response
参考该属性,您必须writeType
在将实际数据写入特征之前进行设置。
一旦获得特性,就可以设置类型,而在写入之前。
BluetoothGattCharacteristic tChar = syncService.getCharacteristic(SYNC_HEIGHT_INPUT_CHAR); if (tChar == null) throw new AssertionError("characteristic null when sync time!");
// use one of them in regards of the Characteristic's property
tChar.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
//tChar.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT);
tChar.setValue(/*another int*/, BluetoothGattCharacteristic.FORMAT_SINT32, 0);
gatt.writeCharacteristic(tChar);
以上是 onCharacteristicwrite中的Android蓝牙状态133 的全部内容, 来源链接: utcz.com/qa/429286.html