【问题标题】:BLE device not showing up in Android ChromeBLE 设备未显示在 Android Chrome 中
【发布时间】:2022-03-01 18:31:51
【问题描述】:

我有一个低功耗蓝牙 (BLE) 设备,并希望使用 Web 蓝牙 API 从网页访问它。

这在 Windows 上的 Chrome 中运行良好(至少在当前版本的 Chrome 和 Windows 上),甚至在 iPadOS 上的 WebBLE 应用程序中(因为 Safari 不支持 WebBluetooth)。

但我有多个运行当前版本的 Android (12) 和 Chrome (97) 的 Android 设备,在浏览器设备选择器中,设备不会显示。其他一些未知设备出现,但我的设备没有。

这台设备没有显示的原因可能是什么?我如何收集有关这种情况的更多信息? 它发生在本机浏览器对话框中,因此我通常的调试步骤不起作用。

更新: 我已经检查过chrome://bluetooth-internals,结果是一样的。该设备显示在 Chrome/Windows 上,但不显示在 Chrome/Android 上。

现在我还使用了chrome://device-log,它只在 Windows 和 Android 上显示

蓝牙内部页面启动蓝牙发现会话

nRF Connect for Mobile 会立即显示设备,并且还会显示在 Android 蓝牙设置中。只有 Chrome Web 蓝牙不显示。

更新 2: adb logcat 在 Chrome 蓝牙发现期间显示以下行:

V/BtGatt.GattService(19403):跳过匹配拒绝列表的数据

那是什么? Chrome 是否有自己的蓝牙设备拒绝名单?

更新3: Android 对 BLE 设备有一个拒绝名单,如果应用程序 (Chrome) 具有 ACCESS_FINE_LOCATION 权限,则不应应用该拒绝名单。但三星似乎仍然应用了黑名单,即使 Chrome 拥有所有必要的权限。

【问题讨论】:

    标签: android google-chrome bluetooth-lowenergy web-bluetooth


    【解决方案1】:

    https://www.chromium.org/developers/how-tos/file-web-bluetooth-bugs/ 列出了可能有帮助的工具和日志查看方法,包括:

    如果您还没有尝试使用 "acceptAllDevices":true 也可以尝试 requestDevice。

    【讨论】:

    • 感谢 chromium.org 的链接,它极大地帮助找到了真正的罪魁祸首。
    【解决方案2】:

    很遗憾,即使此设备不是定位信标(iBeacon、eddyStone),但此设备目前正在按预期工作,根据https://bugs.chromium.org/p/chromium/issues/detail?id=1296054,它已被过滤掉。。 p>

    【讨论】:

    • 我已经联系了硬件制造商,为什么设备被识别为 iBeacon。感谢您迄今为止的帮助。
    【解决方案3】:

    设备未显示的原因是 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

    【讨论】:

    • 似乎只有当用户拒绝了对 Android 应用程序的 ACCESS_FINE_LOCATION android 权限(Chrome 那里)时,这个denyList 才会起作用。您可以检查 Android 上 Chrome 的“位置权限”设置吗?例如,我的已选中“使用精确位置”。
    • 这也是我的第一个猜测,但事实证明 Chrome 已经拥有我附近的精确位置和设备的权限。并且为了精确定位 WiFi 和蓝牙被激活。也许三星的限制有点多,我也会检查一下非三星的 Android。
    • 似乎是三星特有的。使用小米 Android 手机时,设备会显示出来。
    • 这很有趣!感谢分享 Dehalion ;) 你能用三星互联网浏览器重现吗?
    • Chromium 目前似乎使用“neverForLocation”Android 权限标志,它告诉 Android 过滤掉 Eddystone 和 iBeacon 标志。见developer.android.com/guide/topics/connectivity/bluetooth/…
    猜你喜欢
    • 2020-09-14
    • 2017-01-08
    • 2023-04-03
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多