首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android oreo中运行持续的后台服务?

如何在android oreo中运行持续的后台服务?
EN

Stack Overflow用户
提问于 2018-06-13 05:00:25
回答 1查看 3K关注 0票数 4

我一直在扫描BLE设备。现在在android oreo中,操作系统会自动关闭服务,有没有一种方法可以在应用程序被杀死后进行扫描?

我已经探索过

1.)带有通知的前台服务用户体验不佳

2.)周期性作业调度效率低下

3.)使用无障碍服务,android会在不帮助残疾人的情况下清理使用它的应用程序,或者有没有办法事先获得批准?

如果我遗漏了什么让我知道

EN

回答 1

Stack Overflow用户

发布于 2018-06-13 07:04:28

对于全功率扫描,你的选项摘要是准确的。我写了一个blog post,权衡不同选项的利弊。

Android Beacon Library中,我们默认选择使用JobScheduler。它最多每15分钟在后台运行一次。IMO,时间是这种方法的真正缺点。它的重量更重,效率更低,这一事实并不重要,因为作业启动只有15分钟一次。

该库最近还添加了支持,可以选择性地配置foreground service以更频繁地进行扫描。对于许多用例,持久通知是可以接受的,尽管这对其他用例来说是一个真正的缺点。

不幸的是,安卓没有白名单或特殊的审批流程来绕过这一限制。你唯一的选择是如果你是一家设备制造商,可以在你自己的定制安卓版本中自定义规则执行。

您没有提到Android Beacon Library使用的另一种方法是使用一个新的Android have,它可以让您通过intent to a BroadcastReceiver获得扫描结果。如果检测到特定兴趣的BLE数据包,这与扫描过滤器配合使用可以很好地唤醒您的应用程序。但一旦检测到一个。当这个扫描发生时,你的进程并没有运行,但是在发生这样的检测之后,它可以在Android 8上运行一个常规的10分钟限制的后台服务。下面的示例将结果传递给MyBroadcastReceiver

代码语言:javascript
复制
 Intent intent = new Intent(mContext, MyBroadcastReceiver.class);
 PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

 int result = bluetoothAdapter.getBluetoothLeScanner().startScan(filters, settings, pendingIntent);

通过使用上述技术的组合,大多数蓝牙扫描应用程序仍然可以在Android 8+上很好地工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50825772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档