我有一个需要忽略打盹模式的应用程序,并要求用户将其添加到非优化的应用程序列表中,通常的方式是:
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并永久工作(是的,我知道这会耗尽电池,但我的用例需要它)。
我的问题是,稍后用户可能决定从“未优化”列表中删除该应用程序。
我的问题:
我是否有可以注册的广播,以通知电池优化设置已更改?
如果没有,是否有另一种方法来检测我的应用的电池优化设置已更改,而不是定期使用isIgnoringBatteryOptimizations()
检查其状态
最初我认为在这种情况下应用程序将被停止(如同删除权限时),但事实并非如此。
答案 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);