2017-02-09 17 views
0

Я использую приложение BLE на телефоне Android, общающемся с пользовательской панелью датчика BLE. Есть две характеристики, обеспечиваемые доской, ускорение и экв. Со стороны телефона я хотел бы получать уведомления о двух характеристиках с сенсорной панели. Мой код для установки уведомлений:Bluetooth LE прослушивает несколько характерных уведомлений

mGatt.setCharacteristicNotification(ecgChar, true); 
      BluetoothGattDescriptor descriptor = ecgChar.getDescriptor(
        UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); 
      descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); 
      mGatt.writeDescriptor(descriptor); 
      mGatt.setCharacteristicNotification(accelChar, true); 
      descriptor = ecgChar.getDescriptor(
        UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); 
      descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); 
      mGatt.writeDescriptor(descriptor); 

Однако я могу получать уведомления только о первых характеристиках. Когда я регистрирую уведомление только по одному признаку, он работал хорошо. Частота дискретизации составляет 100 Гц для ЭКГ и ускорения. Итак, как я могу получать уведомления по обоим признакам? Благодарю.

ответ

2

У вас может быть только одна выдающаяся игра gatt за раз. В этом случае вы делаете два вызова writeDescriptor перед тем, как дождаться завершения первого. Вы должны подождать https://developer.android.com/reference/android/bluetooth/BluetoothGattCallback.html#onDescriptorWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattDescriptor, int), пока не сможете отправить следующий.

+0

Фактически, я знаю, что операция gatt сериализована, поэтому я попытался добавить задержку между двумя сообщениями, но не работал. Теперь я использую обратные вызовы для обработки сериализации, что является правильным способом, и это работает хорошо! Благодаря! – Sentimental