BLE 设备未出现在 Android Chrome 中
BLE device not showing up in Android Chrome
我有一个低功耗蓝牙 (BLE) 设备,想使用 Web 蓝牙从网页访问它 API。
这在 Chrome 和 Windows 上(至少对于 Chrome 和 Windows 的当前版本)甚至在 iPadOS 上的 WebBLE 应用程序(因为Safari 将不支持 WebBluetooth)。
但我有多个 Android 设备 运行 Android (12) 和 Chrome (97) 的当前版本,在浏览器设备选择器中,设备不会出现。其他一些未知设备出现,但我的设备没有。
只有这台设备没有显示的原因是什么?我该如何收集有关这种情况的更多信息?
它发生在本机浏览器对话框中,所以我通常的调试步骤不起作用。
更新:
我已经用chrome://bluetooth-internals
查过了,结果是一样的。该设备出现在 Chrome/Windows 但未出现在 Chrome/Android。
现在我还使用了 chrome://device-log
,它在 Windows 和 Android 上都只显示
Bluetooth Internals Page initiating Bluetooth discovery session
nRF Connect for Mobile 会立即显示设备,它还会显示在 Android 蓝牙设置中。只有 Chrome Web Bluetooth 不显示。
更新2:
adb logcat
在 Chrome 蓝牙发现期间显示以下行:
V/BtGatt.GattService(19403): Skipping data matching denylist
那是什么? Chrome 有自己的蓝牙设备黑名单吗?
更新3:
Android 有一个 BLE 设备的拒绝列表,如果应用程序 (Chrome) 具有 ACCESS_FINE_LOCATION 权限,则不应应用该列表。但三星似乎仍然应用了拒绝名单,即使 Chrome 拥有所有必要的权限。
https://www.chromium.org/developers/how-tos/file-web-bluetooth-bugs/ 列出可能有用的工具和日志查看方法,包括:
chrome://bluetooth-internals
- nRF Connect for Android
chrome://device-log
试试 requestDevice 和 "acceptAllDevices":true 如果你还没有。
设备未显示的原因是 Android 有一个黑名单,该黑名单使用广告数据匹配 Eddystone 和 iBeacon 负载。
我的设备似乎在其广告数据中包含与 Eddystone 或 iBeacon 匹配的内容,因此被忽略,即使它是数字卷尺。
来源:
https://android.googlesource.com/platform/packages/apps/Bluetooth/+/master/src/com/android/bluetooth/gatt/GattService.java#255
https://android.googlesource.com/platform/packages/apps/Bluetooth/+/master/src/com/android/bluetooth/btservice/AdapterService.java#3939
不幸的是,这个设备被过滤掉了,即使它不是定位信标(iBeacon、eddyStone),但这种行为目前正在按预期工作 [= =10=].
我有一个低功耗蓝牙 (BLE) 设备,想使用 Web 蓝牙从网页访问它 API。
这在 Chrome 和 Windows 上(至少对于 Chrome 和 Windows 的当前版本)甚至在 iPadOS 上的 WebBLE 应用程序(因为Safari 将不支持 WebBluetooth)。
但我有多个 Android 设备 运行 Android (12) 和 Chrome (97) 的当前版本,在浏览器设备选择器中,设备不会出现。其他一些未知设备出现,但我的设备没有。
只有这台设备没有显示的原因是什么?我该如何收集有关这种情况的更多信息? 它发生在本机浏览器对话框中,所以我通常的调试步骤不起作用。
更新:
我已经用chrome://bluetooth-internals
查过了,结果是一样的。该设备出现在 Chrome/Windows 但未出现在 Chrome/Android。
现在我还使用了 chrome://device-log
,它在 Windows 和 Android 上都只显示
Bluetooth Internals Page initiating Bluetooth discovery session
nRF Connect for Mobile 会立即显示设备,它还会显示在 Android 蓝牙设置中。只有 Chrome Web Bluetooth 不显示。
更新2:
adb logcat
在 Chrome 蓝牙发现期间显示以下行:
V/BtGatt.GattService(19403): Skipping data matching denylist
那是什么? Chrome 有自己的蓝牙设备黑名单吗?
更新3: Android 有一个 BLE 设备的拒绝列表,如果应用程序 (Chrome) 具有 ACCESS_FINE_LOCATION 权限,则不应应用该列表。但三星似乎仍然应用了拒绝名单,即使 Chrome 拥有所有必要的权限。
https://www.chromium.org/developers/how-tos/file-web-bluetooth-bugs/ 列出可能有用的工具和日志查看方法,包括:
chrome://bluetooth-internals
- nRF Connect for Android
chrome://device-log
试试 requestDevice 和 "acceptAllDevices":true 如果你还没有。
设备未显示的原因是 Android 有一个黑名单,该黑名单使用广告数据匹配 Eddystone 和 iBeacon 负载。
我的设备似乎在其广告数据中包含与 Eddystone 或 iBeacon 匹配的内容,因此被忽略,即使它是数字卷尺。
来源: https://android.googlesource.com/platform/packages/apps/Bluetooth/+/master/src/com/android/bluetooth/gatt/GattService.java#255 https://android.googlesource.com/platform/packages/apps/Bluetooth/+/master/src/com/android/bluetooth/btservice/AdapterService.java#3939
不幸的是,这个设备被过滤掉了,即使它不是定位信标(iBeacon、eddyStone),但这种行为目前正在按预期工作 [= =10=].