Возможно, это легко, но я не мог действительно изобразить это право до сих пор... Я получил a BroadcastReceiver
при ожидании, чтобы быть инициированным AlarmMangager - это хорошо работает.
Теперь: потому что событие, если бы это происходит, должно обновить некоторые элементы на экране основного вида деятельности, я хотел бы отправить Намерение от того фона BroadcastReceiver к моему Действию - но только если это в настоящее время находится на переднем плане, иначе активном.
Если это не работает или не видимое, я не забочусь - и последняя вещь, которую я хочу сделать, запуск Действие моим намерением! Я обрабатываю перекрашивание представлений в моем onResume () метод, таким образом, я не забочусь вообще.
Какие-либо подсказки, как сделать это?Спасибо!
Править: мой BroadcastReceiver ожидает предупреждений, которые должны быть уведомлены пользователю. Так, это должно быть там и объявлено в декларации. Проблема: это должно будет решить, является ли упомянутое Действие в настоящее время впереди или нет.
Итак, это почти ответ Бино, но: вместо того, чтобы вводить получателя в действие, используйте два получателя с разными намерениями. Первый - это ваше исходное намерение тревоги, с получателем, зарегистрированным в манифесте, как у вас уже есть, а затем этот получатель отправляет второе намерение вещания, которое обрабатывается получателем, зарегистрированным активностью, как говорит Бино.
Я сделал это в моем собственном проекте таймера на github. Вот приемник аварийных сигналов и приемник запросов . Надеюсь, это поможет.
Я полагаю, что вы уже знакомы с 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();
}
Приемник будет получать сигнал тревоги только тогда, когда ваша активность находится на переднем плане :)
(Извините, если мой английский не очень понятен)