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

时间:2016-07-24 08:29:15

标签: java android bluetooth-lowenergy android-ble rxandroidble

我正在尝试阅读/编写这些可能的特征:

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:无效的UUID:AA01 *

我也试过this similar question的解决方案,但没有任何效果。同样的错误。

3 个答案:

答案 0 :(得分:6)

在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 :(得分:1)

您必须提供完整的uuid:

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

答案 2 :(得分:1)

如果您需要更快java.util.UUID.fromString(),则可以使用Fast-UUID-Parser 。它返回java.util.UUID,比java.util.UUID.fromString()快4倍。