#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. Я полностью понял! БОЛЬШОЕ спасибо! (Я не могу проголосовать, прошу прощения за это)