Методы API Android BLE для чтения некоторых характеристик носят асинхронный характер и когда вы запрашиваете какое-то значение, вызывается метод обратного вызова GATT.
Если вы запрашиваете несколько значений характеристик чтения, он просто просто отбрасывает других, пока не будет рассмотрен первый запрос.
Я не понял, если так, почему они сделали методы Async. Если кто-то знает, какой шаблон дизайна мы должны адаптировать для решения этой проблемы, пожалуйста, поделитесь.
Если вы хотите прочитать некоторые характеристики, вы должны запросить его.
// new value available will be notified in Callback Object
mBluetoothGatt.readCharacteristic(ch);
Обратный вызов GATT
public void onCharacteristicRead(BluetoothGatt gatt, android.bluetooth.BluetoothGattCharacteristic characteristic, int status)
Возможное решение №1
https://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained
Любой может объяснить, как это использовать. Я думаю, что это поможет в этом случае, но я все еще смотрю, как его использовать.
Возможное решение №2
Возможное решение № 3
http://tutorials.jenkov.com/java-util-concurrent/synchronousqueue.html
Возможное решение №4
Возможное решение №5
Обновление
Мне удалось заставить его работать с предпочтительной очередью SynchronousQueue, но я поделюсь своим окончательным решением после тестирования. Укажите тайм-аут, иначе он застрянет или запросит некоторое чтение характеристик, которые не поддерживают операцию чтения.
Вы можете видеть, какие характеристики доступны для чтения, уведомляемые см. в этом сообщении