bluetooth-lowenergy - getServiceData 在某些设备中返回一个空数组
问题描述
语境:
我有两台设备: 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 操作系统版本,但似乎它们一个是 Android <8.0,另一个是 Android >=8.0。
您所体验的是Android OS 实现的简单更改。您可以比较在Android 7.1和Android 8.0上解析广告数据的方式。在 Android 8.0 之前,包含来自 UUID 超过 16 位的服务的服务数据的广告数据不会被解析。
Android OS 广告解析的较新实现可能会在库中向后移植。我为此创建了一个问题。
推荐阅读
- c++ - 构建 wxWidgets 后如何处理它
- python - 将 Pandas/List/Array 的组合转换为 Tensorflow 可以接受的东西?
- c# - 包含列表的 C# 列表以及如何检查列表中的列表是否包含给定的字符串?
- jquery - 我怎样才能摧毁一个 wvega 时间选择器
- excel - Excel - 对工作表的动态引用
- xcode - 为什么每次在模拟器中运行之前我都必须删除我的应用程序?
- node.js - 在 AWS 上部署 React + Express
- ios - 如何使用缓存使用 SfSafariView 或 WKWebView 更快地加载网站?
- delphi - Firemonkey 使用 Alt + Char
- python - 来自其类外部的 QStackedWidget 的 setCurrentIndex