В конце концов я нашел решение, поэтому выкладываю его здесь для других.
Проблема заключалась в том, что после успешного подключения MTU был установлен mBluetoothGatt.requestMtu(512)
, а службы запрашивались mBluetoothGatt.discoverServices()
одна за другой, что, вероятно, приводило к путанице.
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
mBluetoothGatt.discoverServices();
mBluetoothGatt.requestMtu(512);
}
}
Решение:
первый запрос mtu и когда финшн откроет услуги
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
mBluetoothGatt.requestMtu(512);
}
}
public void onMtuChanged (BluetoothGatt gatt, int mtu, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
mBluetoothGatt.discoverServices();
}
}