后台服务是用来扫描信标的?

时间:2018-07-03 12:40:04

标签: android ibeacon beacon

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

1 个答案:

答案 0 :(得分:4)

如今,在Android后台进行蓝牙扫描的话题相当……有趣/复杂化……

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

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

  2. 您可以使用前景服务,该服务没有限制,但是需要您显示通知以告知用户您的应用仍在做一些工作。

    < / li>
  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库似乎(至少乍一看)本身没有任何后台支持,因此最好将其包装在前台服务中。