如何正确使用UUID.fromString方法?

How to correctly use UUID.fromString method?

我正在尝试 read/write 这些 ble 特性:

现在,我正在尝试阅读 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 的解决方案,但没有任何效果。同样的错误。

您必须提供完整的 uuid:

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

BLE规范中有两种UUID。

  • 完全限定的 128 位长,通常分配给 BLE 设备的特定供应商以实现 non-standard 功能: 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

希望对你有所帮助。

此致。

如果你需要更快的java.util.UUID.fromString(),你可以使用Fast-UUID-Parser 代替。它 returns java.util.UUIDjava.util.UUID.fromString().

快 4 倍