Android Bluetooth status 133 in onCharacteristicwrite <p>I'm new to Android and now doing a simple app that requires writing some data into a peripheral device. </p> <p>Actually nothing goes wrong in a Samsung GT-S7272C device. But when I switch to Sony LT29i, there will always be a status 133 when I'm trying to write into a certain characteristic. I will give out some brief code.</p> <pre><code>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); </code></pre> <p>and the onCharacteristicWrite function:</p> <pre><code>@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) { ... } </code></pre> <p>Writing into first characteristic has nothing wrong and control will reach the onCharacteristicWrite and enter the first <code>if</code> statement with status <code>0</code>, which means success. Problem is the second writing action in the <code>if</code> statement, which will also trigger onCharacteristicWrite function but yield a status <code>133</code>, which cannot be found in <a href="https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html">the official site</a>. Then the device disconnect automatically.</p> <p>I've confirmed that the data type and the offset are all correct. And because in another device it works really nice, I think there might be some tiny differences of the bluetooth stack implementation between different device that I should do something more tricky to solve this problem.</p> <p>I've search for result for a long time. Some results lead me to the C source code(Sorry, I will post the link below because I don't have enough reputation to post more than 2 links), but I can only find that <code>133</code> means GATT_ERROR there, which is not more helpful than just a <code>133</code>. I've also found a issue in google group, discussing some familiar questions, but I failed to find a solution here.</p> <p>I'm a little bit sad because, if it is something wrong with the C code, even if I can locate what's wrong, I still have no way to make it right in my own code, right?</p> <p>I hope that someone has the familiar experience before and may give me some suggestions. Thanks a lot!</p> <p>links: </p> <ul> <li><p>C source code: <code>https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-4.4.2_r1/stack/include/gatt_api.h</code></p></li> <li><p>Issue: <code>https://code.google.com/p/android/issues/detail?id=58381</code></p></li> </ul>