或许可以使用权限请求忽略电池优化 https://developer.android.com/reference/android/Manifest.permission.html#REQUEST_IGNORE_BATTERY_OPTIMIZATIONS。此权限不需要明确的用户许可。故将获准。尽管这不会阻止用户手动停止应用程序。
From the docs https://developer.android.com/reference/android/Manifest.permission.html#REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:
这是正常的权限:请求该权限的应用程序始终会
授予权限,无需用户批准或查看。
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS https://developer.android.com/reference/android/provider/Settings.html#ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS会将应用程序放入设备的白名单中。
忽略电池优化 https://developer.android.com/reference/android/os/PowerManager.html#isIgnoringBatteryOptimizations(java.lang.String)会让您知道该应用程序是否已列入白名单。
一些笔记the docs https://developer.android.com/reference/android/provider/Settings.html#ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:
注意:大多数应用程序不应该使用它;有很多设施
平台提供的应用程序能够在
多种省电模式。这仅适用于不常见的应用
需要深入控制自己的执行力,但可能会付出代价
用户的电池寿命。请注意,这些应用程序运行速度非常快
向用户展示其高功率消费者的风险
设备。
输入:Intent的数据URI必须指定应用程序包名称
以“封装”方案显示。那是“package:com.my.app”。
我不建议滥用它。
有一个列表白名单可接受的用例 https://developer.android.com/training/monitoring-device-state/doze-standby.html#whitelisting-cases.
一般来说,你的应用程序不应该在白名单中,除非打瞌睡或应用程序
待机破坏app核心功能或存在技术问题
您的应用程序无法使用 FCM 高优先级消息的原因。
谢谢adsamcik https://stackoverflow.com/users/2422905/adsamcik对于这个最新的链接。