【问题标题】:Android BLE Scan Stops after a couple of minutes in backgroundAndroid BLE 扫描在后台运行几分钟后停止
【发布时间】:2020-12-11 11:10:24
【问题描述】:

在为我的公司开发 COVID 联系人跟踪应用程序时,我在后台遇到了 Android 扫描停止问题。这是我尝试过的:

  1. 添加前台服务
  2. 禁用手机中所有与电池相关的优化选项
  3. 启用在后台运行的应用程序
  4. 测试设备:搭载 Android 10 的 Galaxy S20 和 Xperia,搭载 Android 8 的华为。

如果您不禁用这些电池优化设置和应用程序后台更新,则在进入后台时扫描会立即停止。禁用这些设置后,扫描可以运行大约几分钟(约 5 分钟),然后仍会停止。从 David 的博客:http://www.davidgyoungtech.com/2017/08/07/beacon-detection-with-android-8 看来,在后台连续扫描似乎是不可能的,因为 JobScheduler 将每 15 分钟重新启动一次,而每次扫描最多持续约 10 分钟。这是现实,还是我可以每 15 分钟扫描 10 分钟的最佳解决方案?

【问题讨论】:

  • 您可以使用 ADB 运行类似this 的命令吗?或者你可以参考this answer

标签: android background bluetooth-lowenergy beacon


【解决方案1】:

后台信标检测难以实施,因为许多小问题可能会让您感到困扰,而且具体问题因 Android 版本、Android 制造商和有时型号而异。虽然 Android 8+ 使用 Job Scheduler 将后台范围限制为每 15 分钟一次,但如果您添加前台服务,则可以解锁无限制的背景范围。

一些提示:

  1. 首先关注 Galaxy S20,因为三星的行为得到了更好的记录并且更接近原生 Android。 (理想情况下,您应该先在 Pixel 设备上进行测试。)只有在三星设备上运行后,才能继续使用其他设备。

  2. 使用配置了内置前台服务的 Android Beacon Library 参考应用程序,我看到在 Galaxy S10 上无限期地在后台检测标准 iBeacon 或 AltBeacon,即使扫描周期为 1.1 秒。看看你是否可以复制相同的内容。

  3. 小心打盹模式。如果由于手机在屏幕关闭且未充电的情况下静止不动而使 CPU 进入睡眠状态,则您的检测将停止。您可以使用唤醒锁来击败打盹模式,但它会对电池使用产生严重影响。您最好接受它的局限性,并在测试期间定期保持手机运行。如果您想获取日志以查看发生了什么,请使用 ADB 命令在通过 USB 连接时禁用充电或学习通过 WiFi 使用 ADB。

【讨论】:

  • 好的,谢谢大卫。这意味着可以使用前台服务进行连续的后台扫描,至少您在 Galaxy S10 中已经看到了这一点。尽管有制造的限制,但这意味着你可以解锁安卓级别的限制。对于你提到的打盹模式,我做了与 iOS 类似的事情——通过通知点亮屏幕。让我研究您的代码并找出实现该目标的方法。会让你知道。感谢您的帮助。
  • 大卫,不好意思,我又要问下一个问题了: 1. Android 信标库通常用于信标检测,而我的场景有点不同,我需要进行连续的后台扫描,所以我想要一些具体的指南,因为阅读那些本机代码对我来说很痛苦 3. 我阅读的所有帖子都将我引导到两种可能的解决方案:使用 PendingIntent 或 Start Foreground 服务的新 startscan 方法,但没有人确认其中一个是正确的解决方案。 4.不知道前台服务是否尝试正确,但在我的测试中失败了。