即使从“未优化的应用程序”中删除,PowerManager.isIgnoringBatteryOptimizations也始终返回true。

时间:2018-05-08 10:55:20

标签: android android-doze android-doze-and-standby

我有一个里程记录应用程序,可以进行GPS跟踪,并能够在后台建立与汽车的OBDII连接。

现在我想展示一个Popup,告诉用户我的应用程序是否在打盹中没有列入白名单,因为这可能会停止我的后台(实际上是前台)服务......

我做:

 String PACKAGE_NAME = getApplicationContext().getPackageName();
            PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
            boolean status = false;
            status = pm.isIgnoringBatteryOptimizations(PACKAGE_NAME);

            if (!status) {
                // show popup
            }

但是PowerManager.isIgnoringBatteryOptimizations总是返回' true'即使它已从'未优化的应用程序'中删除再次。只有当我卸载应用程序“假”时才会再次归还...... 在Galaxy Note 8(Android 8.0)和Emulator 8.1上进行了测试

问题很简单:这是一个错误吗?或者如何从白名单中删除应用程序,以便PowerManager.isIgnoringBatteryOptimizations返回' false'再次?

1 个答案:

答案 0 :(得分:0)

我制作了一个简单的活动应用程序

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

并将此代码放入onCreate

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent = new Intent();
    String packageName = this.getPackageName();
    PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
    if (pm.isIgnoringBatteryOptimizations(packageName))
        intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
    else {
        intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
        intent.setData(Uri.parse("package:" + packageName));
    }
    this.startActivity(intent);
}

我已经在8.1模拟器上对其进行了测试,并且得到了相同的行为。您可以取消设置所有应用程序或将其状态从优化状态切换为未优化状态。我猜Bob Snyder在Google跟踪器中显示了正确的问题。