如何检测该用户从电池优化中的“未优化”列表中删除了我的应用?

时间:2017-08-19 09:47:01

标签: android battery android-broadcastreceiver

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

    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()检查其状态

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

1 个答案:

答案 0 :(得分:1)

有一个系统广播可以收听: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);