【问题标题】:Bluetooth scanning in Nougat stops after some timeNougat 中的蓝牙扫描在一段时间后停止
【发布时间】:2018-04-23 07:59:01
【问题描述】:

我有一个扫描信标的应用程序。我在 Lollipop 和 Oreo 中没有遇到任何问题,但是在 Marshmellow 和 Nougat 中,经过一段时间(大约 90 分钟)后没有检测到信标。我在网上看到 Nougat 在 30 分钟后停止扫描,因此我每 5 分钟停止/开始扫描一次。我观察到的事情 -

1) 所有设备同时测试,因此我确信信标传输没有问题。

2) 我观察到 wifi 关闭时持续扫描。

3) 停止扫描后,设备不会在“设置”选项卡上显示附近的任何蓝牙设备(可能是蓝牙坏了?)

4) Battery historian 显示 ble_scanning 一直处于开启状态

5) 重启蓝牙即可解决问题并开始扫描。我不想在应用中每次都介绍关闭/打开蓝牙。

我遇到了这个帖子https://github.com/AltBeacon/android-beacon-library/issues/289,但这个帖子是针对棒棒糖的,我没有遇到问题。它谈到了设置 beaconManager.setAndroidLScanningDisabled(true)。目前,我没有使用图书馆。有什么办法可以解决这个问题吗? 我正在使用 XCody Y19 设备 Android 7.0

【问题讨论】:

    标签: bluetooth-lowenergy ibeacon-android


    【解决方案1】:

    除非您在不同制造商的 Android 6.x 和 7.x 的多个设备型号上重现了此问题,否则我认为此问题更有可能是特定于设备的。它可能是由蓝牙芯片引入的,也可能是 ROM 中将蓝牙硬件连接到 Android 蓝牙堆栈的设备特定固件。

    虽然这只是基于您问题中有限数据样本的推测,但我在运行 Android 6.x 和 7.x 的华为、三星 J3、Moto E3 和 Moto G5 设备上看到了类似问题。但我没有在运行 Android 6.x 和 7.x 的 Nexus 设备上看到此类问题。出于这个原因,我认为类似的问题可能不是特定于操作系统的。

    虽然并不理想,但将电源循环至蓝牙是 Android 应用对蓝牙堆栈的少数控制手段之一。它有时(但不总是)可以清除不存在其他 API 的低级蓝牙堆栈问题。出于这个原因,Android Beacon 库中添加了一个可选的 BluetoothMedic,用于查找蓝牙堆栈崩溃并(可选)在发现此类问题时将电源循环到蓝牙。这使您可以忽略此类问题并专注于您的应用程序逻辑。

    虽然我知道您没有使用该库,但如果您有兴趣,可以从此处的拉取请求中复制 BluetoothMedic 类的源代码:https://github.com/AltBeacon/android-beacon-library/pull/644

    【讨论】:

    • 感谢您的回复。我会尝试使用 BluetoothMedic 并会发布它是否有效。
    • 对于自动模式下的 BluetoothMedic,库使用作业调度程序调度作业。这意味着它将在打盹模式下被推迟,对吗?
    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多