アプリ内でブロードキャストする場合は LocalBroadcastManager を使うと良いらしい

サポートパッケージにLocalBroadcastManager というクラスがあるのを今頃知りまして。

ブロードキャストは使い方を誤るとデータを(アプリの)外部に流出させる可能性があるわけですが(Android アプリのセキュア設計・セキュアコーディングガイド 参照)、このクラスを使うと「他のアプリにデータを漏らさない」「意図しないブロードキャストを受信しない」「効率がよい」だそうです。

いつ使うんですか?

たとえば GPS を使うアプリで、GPS の受信は IntentService にやらせて、受信した位置を地図に表示するために、IntentService からブロードキャスト投げて、Activity に仕掛けたレシーバで受信する、なんてケースでしょうか。(いやそれは IntentService じゃなくて普通のサービスで aidl 使ってやれよ、とかいろいろあるわけですが。ん?PendingIntent でサービスを起動する方法だと、クライアントから bind するタイミングが無いからダメかな?)

使い方

stackoverflow に良い使い方が載ってました

使ってみた

状態認識の結果も秘匿情報でしょう、ということで以前作った ActivityRecognitionClient のサンプルを修正してみました。

まとめ

  • ブロードキャストする時は、まず LocalBroadcastManager を使ってみよう。
  • stackoverflow の回答へのダイレクトリンクとか、github の changeset へのダイレクトリンク便利すぎる!