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. Если удалить приложение и установить его снова, метод снова заработает.