4

我有一个需要忽略打盹模式的应用程序,它要求用户以通常的方式将其添加到未优化的应用程序列表中:

    Intent intent = new Intent();
    String packageName = getPackageName();
    intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:" + packageName));
    startActivityForResult(intent, BATTERY_OPTIMIZATION_REQUEST);

onActivityResult()我检查他是否真的将其添加到“未优化”列表中。到目前为止一切顺利。我的应用程序启动它的服务,该服务获取并持有 WAKE_LOCK 并永久工作(是的,我知道这会耗尽电池,但我的用例需要它)。

我的问题是,稍后用户可能会决定从“未优化”列表中删除该应用程序。

我的问题:

  1. 是否有我可以注册的广播以获得电池优化设置更改的通知?

  2. 如果没有,是否有另一种方法来检测我的应用程序的电池优化设置已更改,而不是定期检查其状态isIgnoringBatteryOptimizations()

最初我认为在这种情况下应用程序将被停止(当权限被删除时)但事实并非如此。

4

1 回答 1

4

有一个系统广播可以收听:android.os.action.POWER_SAVE_WHITELIST_CHANGED。它可以被找到,PowerManager.ACTION_POWER_SAVE_WHITELIST_CHANGED但它从 API 中隐藏并且没有记录。

请注意,电池优化白名单中的任何更改都会触发此操作,而不仅仅是您的应用程序。

IntentFilter intentFilter = new IntentFilter("android.os.action.POWER_SAVE_WHITELIST_CHANGED");
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        // the battery optimization whitelist changed
        // TODO: check if isIgnoringBatteryOptimizations()
    }
};
context.registerReceiver(broadcastReceiver, intentFilter);
于 2020-05-20T19:15:33.023 回答