2016-07-24 63 views
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位的值,它必须像我们在低功耗蓝牙文档中获得的那样。 AA01应该是长UUID的开始(所有其他字符可能相同)。一个UUID通常看起来像123e4567-e89b-12d3-a456-426655440000 – bpncool

+0

您可能根本不需要使用UUID,而只需从数据包中读取几个字节(两个用于Object字段,另外两个用于Ambience)。 – chrylis

回答

4

在BLE规范有两种的UUID。 UUID.fromString("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");

  • 而且完全合格的(但由标准定义的),其具有的UUID:其通常指定用于BLE设备的非标准功能的特定于供应商长

    • 完全合格的128位相同的前缀和后缀:UUID.fromString("F000xxxx-0451-4000-B000-000000000000"); 其中xxxx是填充从SensorTag规范中获得的四个字符的地方。为了方便起见,标准UUID通常用四个字符标识符来引用。

    此外,如果你正在处理一个SensorTag设备,您可以检出这是对MCE^3会议今年1所示库演示应用程序:

    讲座:https://www.youtube.com/watch?v=0aKfUGCxUDM

    演示应用程序repository: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,比java.util.UUID.fromString()快4倍。