PowerManager.isIgnoringBatteryOptimizations всегда возвращает true, даже если он удален из "Неоптимизированных приложений"

У меня есть приложение для регистрации пробега, которое отслеживает 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", даже если оно снова удаляется из "Неоптимизированных приложений". Только если я удаляю приложение, "ложь" возвращается снова... Протестировано на Galaxy Note 8 (Android 8.0) и Emulator 8.1

Вопрос прост: это ошибка? Или как удалить приложение из белого списка, чтобы PowerManager.isIgnoringBatteryOptimizations снова возвращал "false"?

2 ответа

Я сделал простое приложение для занятий, которое запрашивает

<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, и у меня такое же поведение. Вы можете отключить приложение или переключить его состояние с оптимизированного на не оптимизированное во всем списке приложений в настройках. Думаю, Боб Снайдер показал правильную проблему в трекере Google.

То же самое. Эмулятор Андроид 9. Если удалить приложение и установить его снова, метод снова заработает.

Другие вопросы по тегам