后台服务是用来扫描Beacon的?
background service is used to scan Beacon?
我可以使用 beaconManager.startScan();
扫描前台的信标,因此它会提供该区域可用的信标信息。
我在服务中使用相同的代码来扫描信标,我也在那里获取信标信息。
但是为了在后台扫描信标,我必须启动 service.So 使用服务扫描信标是否正确?
Android后台做蓝牙扫描的话题挺…interesting/complicated这几天…
使用后台服务不再是一个好的选择。从 API 26 (Android 8.0) 开始,后台服务只会在用户离开应用后继续 运行 几分钟。
(可以说,它甚至不是旧 Android 的好选择。在 Estimote,我们发现一些大牌 Android 智能手机制造商包括他们自己的电源管理 "optimizations" 在他们定制的 Android 版本中,这往往会终止后台服务。)
您可以使用 foreground 服务,它没有任何限制,但需要您显示通知以告知用户您的应用仍在执行某些操作工作。
最后,好消息是,在 Android 8.0 中有一个新的 API 用于蓝牙扫描,其中 BLE 扫描结果通过 PendingIntent
而不是标准的回调。即使应用程序同时获得 suspended/terminated,这也会起作用。
startScan(List<ScanFilter> f, ScanSettings s, PendingIntent i)
坏消息当然是,因为这是 API 26 (Android 8.0) 及更高版本,你还不能太依赖它,因为 Android 8 采用率仍然很低。 Android 背景 BLE 扫描的未来看起来很光明,只是还远未到来。
--
当然,如果您使用现成的扫描库,最好向其作者咨询其后台功能以及如何使用它们。
https://github.com/ufobeacons/Android-SDK 库似乎(至少乍一看)没有任何自己的后台支持,因此您最好将其包装在前台服务中。
我可以使用 beaconManager.startScan();
扫描前台的信标,因此它会提供该区域可用的信标信息。
我在服务中使用相同的代码来扫描信标,我也在那里获取信标信息。
但是为了在后台扫描信标,我必须启动 service.So 使用服务扫描信标是否正确?
Android后台做蓝牙扫描的话题挺…interesting/complicated这几天…
使用后台服务不再是一个好的选择。从 API 26 (Android 8.0) 开始,后台服务只会在用户离开应用后继续 运行 几分钟。
(可以说,它甚至不是旧 Android 的好选择。在 Estimote,我们发现一些大牌 Android 智能手机制造商包括他们自己的电源管理 "optimizations" 在他们定制的 Android 版本中,这往往会终止后台服务。)
您可以使用 foreground 服务,它没有任何限制,但需要您显示通知以告知用户您的应用仍在执行某些操作工作。
最后,好消息是,在 Android 8.0 中有一个新的 API 用于蓝牙扫描,其中 BLE 扫描结果通过
PendingIntent
而不是标准的回调。即使应用程序同时获得 suspended/terminated,这也会起作用。startScan(List<ScanFilter> f, ScanSettings s, PendingIntent i)
坏消息当然是,因为这是 API 26 (Android 8.0) 及更高版本,你还不能太依赖它,因为 Android 8 采用率仍然很低。 Android 背景 BLE 扫描的未来看起来很光明,只是还远未到来。
--
当然,如果您使用现成的扫描库,最好向其作者咨询其后台功能以及如何使用它们。
https://github.com/ufobeacons/Android-SDK 库似乎(至少乍一看)没有任何自己的后台支持,因此您最好将其包装在前台服务中。