由于bg限制,不允许使用Service.startForeground()

时间:2018-11-19 03:58:50

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

我正在尝试在Android 8及更高版本中运行foregroundService。它成功启动,并且当应用程序处于前台或设备不空闲时,前台粘性通知会显示。问题是设备闲置后,Android决定终止显示此日志的服务

Stopping service due to app idle

根据doc,只要有对用户服务可见的通知,就应该很少被杀死:(无论如何,我设置了一个警报,每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标志忽略

在某些情况下:该服务是用来检测用户的睡眠的,因此它必须从用户的睡眠时间到唤醒时间整夜运行。 我通过调用context.startForegroundService(intent)来启动服务,然后在onStartCommand方法中调用startForeground传递通知。 onStartCommand方法始终返回START_REDELIVER_INTENT常量。

1 个答案:

答案 0 :(得分:0)

我通过以下操作解决了这个问题: 设置->应用和通知->我的应用->电池->背景限制

在对话框片段中,选择“删除”以删除背景限制(如果已启用)。