我正在尝试运行 foregroundService
在 android 8 及更高版本中。它成功启动,并且当应用程序处于前台或设备未空闲时显示前台粘性通知。问题是一旦设备空闲,Android 决定终止显示此日志的服务
Stopping service due to app idle
根据文档,只要有用户服务可见的通知就应该很少被杀死:(无论如何,我设置了一个警报,每 15 分钟触发一次,如果它没有运行但它无法启动前台服务日志记录,则尝试再次启动该服务信息
Service.startForeground() not allowed due to bg restriction
在 google 上进行一些搜索:我认为这与 android AppOps 管理有关。显然有权限
RUN_ANY_IN_BACKGROUND
那应该是allow
但它实际上是 ignore
就我而言。我检查使用adb shell cmd get package.name RUN_ANY_IN_BACKGROUND
只是为了测试,我将其设置为
allow
再次手动。但是在应用程序空闲一段时间后,操作系统将其再次设置为忽略并再次停止服务。无论如何,我可以检查我是否违反了一些强制执行
RUN_ANY_IN_BACKGROUND
的限制要忽略的标志 ?对于某些情况:该服务假设检测用户的 sleep ,因此它必须从用户的 sleep 时间到醒来时间运行一整夜。
我通过调用
context.startForegroundService(intent)
开始服务然后在 onStartCommand
我调用的方法startForeground
通过通知。 onStartCommand
方法总是返回 START_REDELIVER_INTENT
持续的。
最佳答案
我通过以下操作解决了这个问题:
设置 -> 应用和通知 -> 我的应用 -> 电池 -> 后台限制
在对话框片段中选择删除以删除背景限制(如果已启用)。
关于android-8.0-oreo - 由于 bg 限制,不允许 Service.startForeground(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53368131/