Информировать активность из BroadcastReceiver ТОЛЬКО, если он находится на переднем плане
Возможно, это легко, но я до сих пор не мог понять это правильно... У меня есть BroadcastReceiver
, ожидающий срабатывания AlarmMangager - это отлично работает.
Теперь: поскольку событие, если оно происходит, должно обновить некоторые элементы на экране основной операции, я бы хотел отправить Intent из этого фона BroadcastReceiver в свою активность - , но только, если он в настоящее время находится на переднем плане, также известный как.
Если он не работает или не отображается, мне все равно - и последнее, что я хочу сделать, - это начать действие по моим намерениям! Я обрабатываю перерисовку представлений в моем методе onResume(), поэтому мне все равно.
Любые подсказки о том, как это сделать?
Спасибо!
EDIT: мой BroadcastReceiver ждет тревог, которые должны быть уведомлены пользователю. Итак, оно должно быть там и объявлено в манифесте. Проблема в том, что он должен будет решить, находится ли упомянутая деятельность в настоящее время впереди или нет.
Ответы
Ответ 1
Итак, это почти ответ Бино, но: вместо того, чтобы перемещать приемник в действие, используйте два приемника с разными намерениями. Первым из них является ваш первоначальный сигнал тревоги Intent, с получателем, зарегистрированным в манифесте, как вы уже есть, и затем этот приемник отправляет второе намерение трансляции, которое обрабатывается получателем, зарегистрированным в активности, как говорит Бино.
Я сделал это в своем собственном проекте таймера, на github. Вот приемник сигналов тревоги и ресивер-получатель. Надеюсь, что это поможет.
Ответ 2
Я считаю, что теперь вы знакомы с AlarmManager (создаете новый будильник, регистрируете приемник...), поэтому я не буду об этом говорить. Просто дайте вам решение по вашему вопросу.
Вместо того, чтобы регистрировать BroadcastReceiver в файле класса и в манифесте, вы создаете только новый BroadcastReceiver в своей деятельности, а затем регистрируете его в методе onResume и отмените его в методе onPause, как это показано в вашей деятельности:
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//do something
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mIntentFilter = new IntentFilter();
mIntentFilter.addAction("your alarm action");
...
}
@Override
protected void onResume() {
registerReceiver(mIntentReceiver, mIntentFilter);
...
super.onResume();
}
@Override
protected void onPause() {
unregisterReceiver(mIntentReceiver);
...
super.onPause();
}
Приемник получит только сигнал тревоги, когда ваша деятельность находится на переднем плане:)
(Извините, если мой английский не ясен)