android - 后台服务用于扫描Beacon?
问题描述
我可以使用它扫描前景中的信标,beaconManager.startScan();
以便提供该地区可用的信标信息。我在服务中使用相同的代码来扫描信标,并且我也正在获取信标信息。但是为了在后台扫描信标,我必须启动服务。那么使用服务扫描信标是正确的做法吗?
解决方案
在 Android 上进行后台蓝牙扫描的话题非常……这几天很有趣/很复杂……</p>
使用后台服务不再是一个好的选择。从 API 26 (Android 8.0) 开始,后台服务只会在用户离开应用程序后继续运行几分钟。
(可以说,在旧版 Android 上,这甚至不是一个好的选择。在 Estimote,我们发现一些知名的 Android 智能手机制造商在他们的定制版 Android 中包含了他们自己的电源管理“优化”,这往往会扼杀后台服务。)
您可以使用前台服务,它没有任何限制,但需要您显示通知以通知用户您的应用仍在执行某些工作。
最后,好消息是,在 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库似乎(至少乍一看)没有任何自己的后台支持,因此您最好将其包装在前台服务中。
推荐阅读
- python - 子类工厂方法的签名
- r - 根据输入值显示/隐藏 shinyTree 节点并维护树状态
- mongodb - 如何迭代 mongo db 文档并更新嵌套数组
- python - Python:快捷条件表达式
- apache-kafka - 无法向架构注册表发送 HTTP 请求
- android - 使用特定于 UI 的数据增强 PagedList 且不破坏 MVVM 模式的最佳方法
- python - 有没有更好的方法在 Python 中读取多个 txt 文件?
- java - 找不到文件声音,并返回 java.lang.NullPointer 异常
- macos - 在 MacOS 上批量重命名多个目录中的文件
- c - 文字 UTF-8 字符的数值