android-8.0-oreo - 由于 bg 限制,不允许 Service.startForeground()

标签 android-8.0-oreo android-9.0-pie

我正在尝试运行 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/

相关文章:

android - 错误 :Execution failed for task ':app:processDebugResources' when using font folder inside res

安卓奥利奥 : Grouped Notifications With Notification Channels

android - 服务中的前台通知在 Android 8.1 中不起作用

android - 如何使用 AccessibilityService 在 Android Oreo 及更高版本的 UI 窗口中单击?

android - relativelayout 中的 Textview 和按钮在 android oreo 和 pie 中不可见,但在其他 android 版本中完全可见

java - Android API 28 更新后,获取 : Error while merging dex archives

Android P 的 Android 导航栏可见性 - 检测基于手势的导航

android - 我们如何获得顶部有凹口的屏幕尺寸

java - 当默认构造函数被弃用时如何调用父类的构造函数

android - Google Play控制台-崩溃报告:java.lang.RuntimeException