Широковещательные приемники в фоновом режиме, когда приложение не находится в последних версиях

#android #broadcastreceiver

#Android #broadcastreceiver

Вопрос:

Я пытаюсь создать приложение, которое поджаривает уровень заряда батареи всякий раз, когда уровень заряда батареи меняется. Я использую широковещательный приемник, который зарегистрирован в ‘ACTION_BATTERY_CHANGED’. Это нормально работает в фоновом режиме, только когда приложение все еще находится в последних версиях (т. Е. приложение не закрыто), но это не работает, когда приложение закрыто!

[‘ACTION_BATTERY_CHANGED’ запускается при изменении уровня заряда батареи.]

Ниже приведен код:

 public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //registering the reciever.
    this.registerReceiver(this.mBatInfoReciever,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

}
private BroadcastReceiver mBatInfoReciever = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int level = intent.getIntExtra("level",0);
        /*To get the Battery Level.*/

        Toast t=Toast.makeText(getApplicationContext(),String.valueOf(level),Toast.LENGTH_LONG);
        t.show();

    }

};


}
  

Ответ №1:

Как только ваше MainActivity будет уничтожено, ваше BroadcastReceiver исчезнет. Это произойдет:

  • Если пользователь нажимает назад или
  • Если пользователь переходит каким-либо другим способом (например, нажимает HOME) и ваш процесс завершается

Похоже, вы определяете «приложение закрыто» как то, когда пользователь удаляет приложение с экрана обзора (список последних задач). Обычно это завершает процесс приложения, поэтому ваше BroadcastReceiver на этом этапе исчезнет.

Комментарии:

1. Говоря, что «приложение закрыто», я имею в виду, что приложение не работает в фоновом режиме. Это работает нормально, если я запустил приложение и нажимаю кнопку «Домой» (пример: скажем, я нажимаю «Домой» и запускаю какое-то другое приложение, оно по-прежнему повышает уровень заряда батареи); но как только я удаляю приложение из последних версий, оно не работает. Пожалуйста, укажите, что следует сделать, чтобы оно могло запускаться даже при закрытии приложения.

2. @PremBharwani: «Я имею в виду, что приложение не работает в фоновом режиме» — это означало бы, что ваш процесс завершен. На этом этапе ваш BroadcastReceiver пропал.

3. Хорошо, но почему мой BroadcastReciever пропал? Я не создал его в методе onCreate () класса. Итак, какими методами я могу добиться этого, когда приложение закрыто? Спасибо. @CommonsWare

4. @PremBharwani: «но почему мой BroadcastReciever пропал?» — когда ваш процесс завершается, все ваше приложение в памяти исчезает. «Итак, каковы методы, с помощью которых я могу добиться этого, когда приложение закрыто?» — как правило, вы этого не делаете. Эта трансляция предназначена для запуска приложений, которые могут захотеть изменить поведение в зависимости от изменений уровня заряда батареи. Начиная с Android 8.0, большинство системных широковещательных сообщений ведут себя именно так: они доставляются только запущенным приложениям. Вы могли бы попробовать использовать службу переднего плана и иметь свой BroadcastReceiver , чтобы попытаться продлить выполнение вашего процесса.

5. Я полностью понял! БОЛЬШОЕ спасибо! (Я не могу проголосовать, прошу прощения за это)