Сообщите Действию от BroadcastReceiver, ТОЛЬКО ЕСЛИ это находится на переднем плане

Возможно, это легко, но я не мог действительно изобразить это право до сих пор... Я получил a BroadcastReceiver при ожидании, чтобы быть инициированным AlarmMangager - это хорошо работает.

Теперь: потому что событие, если бы это происходит, должно обновить некоторые элементы на экране основного вида деятельности, я хотел бы отправить Намерение от того фона BroadcastReceiver к моему Действию - но только если это в настоящее время находится на переднем плане, иначе активном.

Если это не работает или не видимое, я не забочусь - и последняя вещь, которую я хочу сделать, запуск Действие моим намерением! Я обрабатываю перекрашивание представлений в моем onResume () метод, таким образом, я не забочусь вообще.

Какие-либо подсказки, как сделать это?Спасибо!

Править: мой BroadcastReceiver ожидает предупреждений, которые должны быть уведомлены пользователю. Так, это должно быть там и объявлено в декларации. Проблема: это должно будет решить, является ли упомянутое Действие в настоящее время впереди или нет.

23
задан Zordid 13 September 2011 в 11:57
поделиться

2 ответа

Итак, это почти ответ Бино, но: вместо того, чтобы вводить получателя в действие, используйте два получателя с разными намерениями. Первый - это ваше исходное намерение тревоги, с получателем, зарегистрированным в манифесте, как у вас уже есть, а затем этот получатель отправляет второе намерение вещания, которое обрабатывается получателем, зарегистрированным активностью, как говорит Бино.

Я сделал это в моем собственном проекте таймера на github. Вот приемник аварийных сигналов и приемник запросов . Надеюсь, это поможет.

38
ответ дан 29 November 2019 в 00:46
поделиться

Я полагаю, что вы уже знакомы с 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();
}

Приемник будет получать сигнал тревоги только тогда, когда ваша активность находится на переднем плане :)

(Извините, если мой английский не очень понятен)

43
ответ дан 29 November 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: