6

Есть ли способ узнать, были ли получены трансляции LocalBroadcastManager? Или слушают?Есть ли способ узнать, были ли получены трансляции LocalBroadcastManager?

В основном у меня есть IntentService, слушая Google Cloud Messages. Когда он получает один, мне нужно либо показать уведомление, либо предупредить мою главную службу о том, что появилось новое сообщение - в принципе, я не хочу того и другого! Поэтому мне нужно знать, было ли сообщение обработано моей основной службой ...

Очевидно, что это может быть сделано с помощью sendOrderedBroadcast и BroadcastReceiver, но это кажется излишним для моих простых частных внутрипроцессных потребностей.

+0

Зачем вам в первую очередь нужны две услуги? – CommonsWare

+2

@CommonsWare - потому что они имеют совершенно разные цели и жизненные циклы, и поэтому он улучшает мою архитектуру приложения для их разделения. Один из них - IntentService, а другой - связанный сервис. – ostergaard

ответ

25

Есть ли способ узнать, были ли получены трансляции LocalBroadcastManager? Или слушают?

sendBroadcast() возвращает true если был 1+ приемники, false иначе. Это не документировано, но это основано на текущей реализации. Я подал an issue to get that documented.

Следовательно, ваш IntentService может использовать sendBroadcast(), чтобы попытаться отправить сообщение на ваш бег Service, если он существует. Если это так, sendBroadcast() должен вернуть true, а IntentService знает, что сообщение должно быть обработано там. Если sendBroadcast() возвращает false, вы можете поднять Notification.

+1

DUH! Я даже видел логический результат и просто думал, что это будет означать, что трансляция была хорошо ... трансляция. Благодарю. – ostergaard

+0

Какое «откровение» и облегчение, что *** это действительно то, что я предполагал! Спасибо @CommonsWare! –