getServiceData在某些设备中返回空数组

时间:2019-06-18 21:56:57

标签: bluetooth-lowenergy rxandroidble

上下文:

我有两个设备: 1. LG G7 2.华为Pra LX1

我当前正在使用 实现“ com.polidea.rxandroidble2:rxandroidble:1.10.0”

当我致电

Disposable scanSubscription = rxBleClient.scanBleDevices(
        new ScanSettings.Builder()
            // .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) // change if needed
            // .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) // change if needed
            .build()
        // add filters if needed
)
    .subscribe(
        scanResult -> {
            // Process scan result here.
        },
        throwable -> {
            // Handle an error here.
        }
    );

当我调用scanResults对象中的getScanRecord()。getServiceData()时,我会得到不同的行为:

对于设备#1,我得到一个带有值的数组(正确) 对于2号设备,我得到了一个空数组(错误)

问题是,我正在使用第三个应用程序(nRF Connect)来查看设备#2是否具有任何硬件限制,并且我可以看到广告中的ServiceData信息具有预期的1个结果。

我做错什么了吗?

1 个答案:

答案 0 :(得分:1)

您没有提到测试设备的Android OS版本,但似乎它们一个是Android <8.0,另一个是Android> = 8.0。

您遇到的是对Android OS实现的简单更改。您可以比较如何在Android 7.1Android 8.0上解析广告数据。在Android 8.0之前,未解析包含UUID超过16位的服务中的服务数据的广告数据。

Android OS广告解析的较新实现可能会在库中向后移植。我为此创建了an issue