小编Zee*_*ail的帖子

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

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

Stopping service due to app idle
Run Code Online (Sandbox Code Playgroud)

根据文档,只要有用户可见的通知,服务就很少会被杀死:(无论如何,我设置了一个每 15 分钟触发一次的警报,并尝试在服务未运行时再次启动该服务,但无法启动前台服务日志记录信息

Service.startForeground() not allowed due to bg restriction
Run Code Online (Sandbox Code Playgroud)

通过谷歌搜索:我认为这与 android AppOps 管理有关。显然应该有一个许可RUN_ANY_IN_BACKGROUNDallow但实际上就ignore我而言。我检查使用

adb shell cmd get package.name RUN_ANY_IN_BACKGROUND
Run Code Online (Sandbox Code Playgroud)

只是为了测试,我allow再次手动将其设置为。但一段时间后,当应用程序空闲时,操作系统将其再次设置为忽略,并且服务再次停止。

无论如何,我可以检查我是否违反了一些强制忽略此RUN_ANY_IN_BACKGROUND标志的限制?

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

android-8.0-oreo android-9.0-pie

6
推荐指数
1
解决办法
1955
查看次数

标签 统计

android-8.0-oreo ×1

android-9.0-pie ×1