【问题标题】:How to correctly use UUID.fromString method?如何正确使用 UUID.fromString 方法?
【发布时间】:2016-07-24 08:29:14
【问题描述】:

我正在尝试读/写这些 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:无效的 UUID:AA01*

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

【问题讨论】:

  • 这不是 UUID。 UUID 看起来像这样:123e4567-e89b-12d3-a456-426655440000。见en.wikipedia.org/wiki/Universally_unique_identifier
  • UUID 应该是一个 128 位的值,它必须像我们在低功耗蓝牙文档中得到的那样。 AA01 应该是长 UUID 的开始(所有其他字符可能相同)。 UUID 通常看起来像 123e4567-e89b-12d3-a456-426655440000
  • 您可能根本不需要使用 UUID,而只需从数据包中读取几个字节(两个用于对象字段,两个用于环境)。

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


【解决方案1】:

在 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

希望对你有帮助。

最好的问候。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您必须提供完整的 uuid:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-20
        • 2019-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多