我有一个需要忽略打盹模式的应用程序,它要求用户以通常的方式将其添加到未优化的应用程序列表中:
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()
定期检查其状态? 最初我认为在这种情况下应用程序将被停止(当权限被删除时),但事实并非如此。
最佳答案
有系统广播可以收听: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);
关于android - 如何检测用户在电池优化中从 "Not optimized"列表中删除了我的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45770063/