安卓蓝牙状态 133 在字符写入
我是Android的新手,现在做一个简单的应用程序,需要将一些数据写入外围设备。
实际上,三星GT-S7272C设备中没有任何问题。但是当我切换到索尼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 函数:
@Override
public 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) {
...
}
写入第一个特征没有错,控制将到达 on 字符写入并输入第一个语句 状态 ,这意味着成功。问题是语句中的第二个写入操作,它也会触发 onCharacteristicWrite 函数,但会产生状态 ,这在官方网站上找不到。然后设备自动断开连接。if
0
if
133
我已确认数据类型和偏移量都正确。而且由于在另一台设备中它的工作效果非常好,我认为不同设备之间的蓝牙堆栈实现可能存在一些微小的差异,我应该做一些更棘手的事情来解决这个问题。
我搜索结果已经很长时间了。一些结果将我引向C源代码(对不起,我将发布下面的链接,因为我没有足够的声誉来发布超过2个链接),但我只能找到这意味着GATT_ERROR那里,这并不比仅仅一个更有用。我也在谷歌小组中发现了一个问题,讨论了一些熟悉的问题,但我在这里找不到解决方案。133
133
我有点难过,因为如果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