スポンサーサイト

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

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

AndroidのBroadcastに関して、改めておさらい。

たいていの場合、BroadcastReceiverにBroadcast Intentを送る場合、Context.sendBroadcast()を使うが、そのほかにも、Context.sendOrderedBroadcast()Context.sendStickyBroadcast()などがある。

とりあえず、ここでは、Context.sendOrderedBroadcast()について説明する。

sendOrderedBroadcast()

sendOrderedBroadcastを使うと、このメソッドで配信したBroadcast Intentが、受信可能なBroadcastReceiverに順番に配信されるようになる。配信される順番は、Intent Filterに設定されるプライオリティで決まる。

コード上では、以下のようにIntent Filterに設定する。
myReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter("MY_ACTION");
intentFilter.setPriority(10);
registerReceiver(myReceiver, intentFilter);

AndrooidManifest.xmlファイルのBroadcastReceiverのプライオリティをセットする場合は、android:priority属性を使用する。





ここではそれぞれに10と100をプライオリティとして設定しているが、初期設定0から1000までの値を設定でき、大きい値ほど高い優先度を持つ。この設定によって、より優先度の高いBroadcastReceiverから配信されていく。優先度が同じものがある場合は、順番はランダムになるようだ。

また重要な特徴として、このメソッドでのBroadcastでは、レシーバ側で配信の中断を行うことができる。また各レシーバでの処理結果などを最終的に配信元で受け取ることができるのだ。

以下のような感じで、各レシーバ側のsetResultCode()、setResultExtras()、setResultData()でデータをセットできる。これらのメソッドを使って値を設定すると、そのレシーバの前に呼ばれているレシーバでセットした値は上書きされる(Bundleの場合は、keyが同じであれば)
 @Override
public void onReceive(Context context, Intent intent)
{
setResultCode(getResultCode());

Bundle extras = getResultExtras(true);
extras.putString("key", "value");
setResultExtras(extras);
}

Context.sendOrderedBroadcast()は2種類あり、結果を受け取れるのは、以下のメソッドである。
public abstract void sendOrderedBroadcast (Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)

最終的にセットされたデータを取得するには、第3引数のresultReceiverに指定したBroadcastReceiverのOnReceiveメソッド内で、getResultCode()、getResultExtras()、getResultData()を使うことになる。

また、abortBroadcast()を呼び出せば、以降のBroadcastReceiverに配信されなくなる。この場合でも、最終的な結果は受け取れる。

次回はContext.sendStickyBroadcast()に書こうと思う。

コメントの投稿

非公開コメント

プロフィール

basarafire

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

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

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