getServiceData returns 某些设备中的空数组
getServiceData returns an empty array in some devices
上下文:
我有两个设备:
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 个结果。
我做错了什么吗?
你没有提到你的测试设备的 Android OS 版本,但似乎一个是 Android <8.0,另一个是 Android >= 8.0.
您所体验的是Android OS 实现的简单更改。您可以比较Android 7.1 and Android 8.0上广告数据是如何解析的。 Android 8.0 之前的广告数据包含来自 UUID 长于 16 位的服务的服务数据未被解析。
Android OS 广告解析的较新实现可能会在库中向后移植。我为此创建了 an issue。
上下文:
我有两个设备: 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 个结果。
我做错了什么吗?
你没有提到你的测试设备的 Android OS 版本,但似乎一个是 Android <8.0,另一个是 Android >= 8.0.
您所体验的是Android OS 实现的简单更改。您可以比较Android 7.1 and Android 8.0上广告数据是如何解析的。 Android 8.0 之前的广告数据包含来自 UUID 长于 16 位的服务的服务数据未被解析。
Android OS 广告解析的较新实现可能会在库中向后移植。我为此创建了 an issue。