我可以使用beaconManager.startScan();
扫描前台的信标,这样它就可以在该区域提供信标信息。
我在服务中使用的相同代码来扫描信标,并且在那里我也获得了信标信息。
但是要在后台扫描信标,我必须启动服务。那么使用服务扫描信标是正确的做法吗??
答案 0 :(得分:4)
如今,在Android后台进行蓝牙扫描的话题相当……有趣/复杂化……
使用后台服务已不再是一个好选择。从API 26(Android 8.0)开始,后台服务仅在用户离开应用后再继续运行几分钟。
(可以说,在较旧的Android上这甚至不是一个好选择。在Estimote,我们发现一些知名的Android智能手机制造商在其定制版本的Android中包含了自己的电源管理“优化”功能,这往往会扼杀背景知识服务。)
您可以使用前景服务,该服务没有限制,但是需要您显示通知以告知用户您的应用仍在做一些工作。
< / li>最后,好消息是,在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库似乎(至少乍一看)本身没有任何后台支持,因此最好将其包装在前台服务中。