9

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

现在我想显示一个弹出窗口,通知用户如果我的应用程序没有被列入白名单,因为这可能会停止我的后台(实际上是前台)服务......

我愿意:

 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”,即使它再次从“未优化的应用程序”中删除。仅当我卸载应用程序'false' 再次返回...在 Galaxy Note 8 (Android 8.0) 和 Emulator 8.1 上测试

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

4

1 回答 1

1

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

<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 tracker 中显示了正确的问题。

于 2020-05-29T14:46:46.347 回答