サポートパッケージにLocalBroadcastManager
というクラスがあるのを今頃知りまして。
ブロードキャストは使い方を誤るとデータを(アプリの)外部に流出させる可能性があるわけですが(Android アプリのセキュア設計・セキュアコーディングガイド 参照)、このクラスを使うと「他のアプリにデータを漏らさない」「意図しないブロードキャストを受信しない」「効率がよい」だそうです。
いつ使うんですか?
たとえば GPS を使うアプリで、GPS の受信は IntentService
にやらせて、受信した位置を地図に表示するために、IntentService からブロードキャスト投げて、Activity
に仕掛けたレシーバで受信する、なんてケースでしょうか。(いやそれは IntentService じゃなくて普通のサービスで aidl 使ってやれよ、とかいろいろあるわけですが。ん?PendingIntent でサービスを起動する方法だと、クライアントから bind するタイミングが無いからダメかな?)
使い方
stackoverflow に良い使い方が載ってました
使ってみた
状態認識の結果も秘匿情報でしょう、ということで以前作った ActivityRecognitionClient
のサンプルを修正してみました。
まとめ
- ブロードキャストする時は、まず LocalBroadcastManager を使ってみよう。
- stackoverflow の回答へのダイレクトリンクとか、github の changeset へのダイレクトリンク便利すぎる!