スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Android開発】いろいろなBroadcast②

引き続き、AndroidのBroadcastに関して、おさらーい。

前回Context.sendOrderedBroadcast()について書いた。今回はContext.sendStickyBroadcast()について書いていく。

sendStickyBroadcast()

sendStickyBroadcast()でブロードキャストすることで、スティッキーなBradcast Intentを送ることができる。スティッキーなBradcast Intentは配信が終了した後も存在し続け、配信が終了した後に登録されたBroadcastReceiverにも配信されるIntentなのだ。スティッキーとは、粘着性という意味だ(と思う)。このBradcast Intentは、removeStickyBroadcast()を呼ぶまで存続し続ける。システムが配信するStickyなBroadcastでは、たとえばACTION_BATTERY_CHANGEDで利用している。スティッキーなBradcast Intentなので、前回のバッテリーの状態が保存されているので、BroadcastReceiverを登録した瞬間にバッテリーの状態を取得できるのだ。

当初、このスティッキーBroadcastを知らない私は、なぜ、ACTION_BATTERY_CHANGEDを受けるフィルターを持つBroadcastReceiverが即座にバッテリーの状態を受信できるのか不思議だったが、スティッキーBroadcast Intentを知って納得がいった。

これに関連した話だが、ContextクラスのregisterReceiver()メソッドの定義は
public abstract Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter)
となる。この戻り値のIntentは、実はfilterに合致したスティッキーなIntentであり、該当するIntentがない場合はnullとなる。
登録したBroadcastReceiverのIntentFilterがスティッキーなIntentに合致すれば、そのIntentが、戻り値として即座にかえてくるということである。該当するスティッキーなIntentが複数ある場合は、そのうちの一つだけが戻り値として戻る。どのIntentが戻るかはアプリからは制御できない。スティッキーなIntentをその場で取得したいだけなら、第一引数のreceiverをnullにして呼び出せばよいのだ。

コメントの投稿

非公開コメント

プロフィール

basarafire

Author:basarafire
IT関連会社で情報処理の基礎やプログラミング(主にC・Java)を教えています。最近はAndroidの教育や開発なども行ったりしています。

basarafireの開発したアプリに関する内容はこちらから
http://basarafire.jugem.jp/

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
お気に入り
[プレスブログ]価値あるブログに換金可能なポイントを差し上げます。 アクセストレードレビュー
提携
ゲーム
QRコード
QR
リンク
RSSリンクの表示
お気に入り商品
カウンター
おすすめAndroid書籍
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。