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

У меня есть приложение для журнала пробега, которое отслеживает GPS и может установить соединение OBDII с автомобилем в фоновом режиме.

Теперь я хочу показать всплывающее окно, которое информирует пользователей, если мое приложение не внесено в белый список в дремоте, так как это может остановить мои фоновые (фактически передние) службы...

I do:

 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) и эмуляторе 8.1.

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


person stefan    schedule 08.05.2018    source источник
comment
Я не вижу описанного вами поведения с эмуляторами 8.0 или 8.1. Я действительно вижу эту связанную проблему с обновлением списка неоптимизированных приложений: issuetracker. google.com/issues/37067894   -  person Bob Snyder    schedule 27.06.2018
comment
Я предполагаю, что ваше приложение должно удовлетворять этим условиям внесения в белый список, только тогда он будет исключен из любой оптимизации.   -  person Rahul Thakur    schedule 30.10.2018
comment
@Rahul Thakur: -> Приложение для автоматизации задач -> Основная функция приложения — планирование автоматических действий, таких как обмен мгновенными сообщениями, голосовые вызовы, управление новыми фотографиями или действия по определению местоположения. Если это применимо. Приемлемый   -  person stefan    schedule 04.11.2018
comment
Я предполагаю, что ваше решение заключается в запуске службы переднего плана, когда это необходимо, вместо того, чтобы пытаться добавить приложение в белый список, чтобы избежать оптимизации батареи. Ознакомьтесь с этой [ссылкой] (developer.android.com /training/monitoring-device-state/), чтобы узнать больше о службах переднего плана. Я бы также порекомендовал вам ознакомиться с сессией Google IO 2016 года о дремлющем и ждущем приложениях, чтобы выяснить, что лучше всего подходит для вас. Это поможет вам выяснить взаимодействие с пользователем, которое не связано с добавлением вашего приложения в белый список.   -  person Rahul Thakur    schedule 13.11.2018
comment
@RahulThakur сервис по-прежнему отключается в пользовательском интерфейсе, таком как MIUI/funtouch OS/oxygen OS. любое решение этой проблемы?   -  person Parth Anjaria    schedule 26.02.2019
comment
Я также сталкиваюсь с той же проблемой.   -  person Mohammed mansoor    schedule 04.05.2020


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

person thekekc    schedule 29.05.2020