Я новичок в Android и теперь делаю простое приложение, которое требует записи некоторых данных в периферийное устройство.
На самом деле ничего не происходит в устройстве Samsung 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:
@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) {
...
}
Запись в первую характеристику не имеет ничего плохого, и управление достигнет onCharacteristicWrite и введите первый оператор if
со статусом 0
, что означает успех. Проблема - второе действие записи в операторе if
, которое также вызывает функциюCharacteristicWrite, но дает статус 133
, который не может быть найден на официальном сайте. Затем устройство автоматически отключается.
Я подтвердил правильность типа данных и смещения. И поскольку в другом устройстве он работает очень хорошо, я думаю, что могут быть некоторые незначительные различия в реализации стека bluetooth между различными устройствами, что я должен сделать что-то более сложное, чтобы решить эту проблему.
Я искал результат в течение длительного времени. Некоторые результаты приводят меня к исходному коду 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