0

Я пытаюсь читать/писать эту BLE характеристики:Как правильно использовать метод UUID.fromString?

enter image description here

Сейчас я пытаюсь читать AA01 *

Я использую this library, чтобы сделать это.

Вот мой код:

private void connectToSensorTag(RxBleDevice rxBleDevice) { 
    rxBleDevice.establishConnection(getApplicationContext(), false) 
      .doOnError(new Action1<Throwable>() { 
       @Override 
       public void call(Throwable throwable) { 
        int i = 0; 
       } 
      }) 
      .flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(UUID.fromString("AA01*"))) 
      .subscribe(new Subscriber<byte[]>() { 
       @Override 
       public void onCompleted() { 
        int i = 0; 
       } 

       @Override 
       public void onError(Throwable e) { 
        int i = 0; 
       } 

       @Override 
       public void onNext(byte[] bytes) { 
        int i = 0; 
       } 
      }); 

Я получаю эту ошибку:

java.lang.IllegalArgumentException: Invalid UUID: AA01*

Я также попытался решения от this similar question, но ничего не работает. Такая же ошибка.

+1

Это не UUID. UUID выглядит так: 123e4567-e89b-12d3-a456-426655440000. См. Https://en.wikipedia.org/wiki/Universally_unique_identifier. – smarx

+0

UUID должен быть 128-битным значением, он должен быть чем-то вроде того, что мы получаем в документах с низкой энергией Bluetooth. AA01 должен начинаться с длинного UUID (все остальные символы могут быть одинаковыми). UUID обычно выглядит как 123e4567-e89b-12d3-a456-426655440000 – bpncool

+0

Вам, вероятно, не нужно вообще использовать UUID, а просто читать несколько байтов от пакета (два для поля Object и два для Ambience). – chrylis

ответ

4

В BLE спецификации есть два вида UUID,.

  • Полностью квалифицированные 128 бит длиной, которые, как правило, назначенные для конкретного поставщика в BLE устройства для нестандартных функциональных возможностей: UUID.fromString("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");

  • Кроме того, полное (но определено стандартом) UUID, которые имеют тот же префикс и постфикс: UUID.fromString("F000xxxx-0451-4000-B000-000000000000"); где xxxx - это место для заполнения четырех символов, которые вы получаете из спецификации SensorTag. Для удобства стандартные UUID обычно ссылаются на четыре символа.

Кроме того, если вы имеете дело с устройством SensorTag вы можете оформить в библиотеку демо-приложение, которое было показано на MCE^3 конференции в этом году:

Разговор: https://www.youtube.com/watch?v=0aKfUGCxUDM

Демонстрационное приложение хранилище: https://github.com/dariuszseweryn/2016_MCE_Demo_RxAndroidBLE

Я надеюсь, что это вам поможет.

С наилучшими пожеланиями.

1

Вы должны обеспечить полный UUID:

UUID uid = UUID.fromString("f000aa01-0451-4000-b000-000000000000"); 
1

Если вам нужно быстрее java.util.UUID.fromString(), вы можете использовать Fast-UUID-Parser . Он возвращает java.util.UUID, и он в 4 раза быстрее, чем java.util.UUID.fromString().