首页 > 解决方案 > 后台服务用于扫描Beacon?

问题描述

我可以使用它扫描前景中的信标,beaconManager.startScan();以便提供该地区可用的信标信息。我在服务中使用相同的代码来扫描信标,并且我也正在获取信标信息。但是为了在后台扫描信标,我必须启动服务。那么使用服务扫描信标是正确的做法吗?

标签: androidibeaconbeacon

解决方案


在 Android 上进行后台蓝牙扫描的话题非常……这几天很有趣/很复杂……</p>

  1. 使用后台服务不再是一个好的选择。从 API 26 (Android 8.0) 开始,后台服务只会在用户离开应用程序后继续运行几分钟。

    (可以说,在旧版 Android 上,这甚至不是一个好的选择。在 Estimote,我们发现一些知名的 Android 智能手机制造商在他们的定制版 Android 中包含了他们自己的电源管理“优化”,这往往会扼杀后台服务。)

  2. 您可以使用前台服务,它没有任何限制,但需要您显示通知以通知用户您的应用仍在执行某些工作。

  3. 最后,好消息是,在 Android 8.0 中有一个用于蓝牙扫描的新 API,BLE 扫描结果通过一个PendingIntent而不是标准回调传递。即使应用程序在此期间被暂停/终止,这也将起作用。

    startScan(List<ScanFilter> f, ScanSettings s, PendingIntent i)

    坏消息当然是,因为这是 API 26 (Android 8.0) 及更高版本,你还不能真正依赖它,因为 Android 8 的采用率仍然很低。Android 上后台 BLE 扫描的未来看起来很光明,只是还没有到来。

--

当然,如果您使用的是现成的扫描库,最好向其作者咨询其后台功能以及如何使用它们。

https://github.com/ufobeacons/Android-SDK库似乎(至少乍一看)没有任何自己的后台支持,因此您最好将其包装在前台服务中。


推荐阅读