【问题标题】:How to detect that user removed my app from "Not optimized" list in battery optimization?如何检测用户从电池优化的“未优化”列表中删除了我的应用程序?
【发布时间】:2017-08-19 09:47:00
【问题描述】:

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

    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()检查其状态之外,是否还有其他方法可以检测我的应用的电池优化设置已更改@

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

【问题讨论】:

  • @Tigger 这将简单地返回“android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS”,这是我刚刚用setAction() 设置的。不是吗?
  • 你能解决这个问题吗?
  • @user1002448 不,到目前为止我无法解决它
  • 您如何检查应用是否在“未优化”列表中?
  • @user1002448 isIgnoringBatteryOptimizations()

标签: android broadcastreceiver battery android-powermanager


【解决方案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);

【讨论】:

  • 太好了,我已经测试过了,它按预期工作。它拯救了我的一天。这应该是一个公认的答案。
猜你喜欢
  • 2022-07-15
  • 2011-06-11
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2012-12-12
  • 2011-06-23
  • 2019-06-02
  • 1970-01-01
相关资源
最近更新 更多