2016-07-24 177 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倍。