今回はAndroidでブロードキャストの送受信する方法について記す。
##目的
私が目的とするプログラムはAsyncTaskを継承したクラスからブロードキャストを送信し、メインアクテビティでそれを受信するプログラムである。
##必要なクラス
ブロードキャストはアクティビティやサービスクラスから送信できる。
一方受信するにはBroadcastReceiverを継承したクラスが必要である。
##実装
###登録
まずBroadcastReceiverを継承したクラス(MyReciever)をマニフェストに登録しなければならないので、以下を追記する。このクラスは一クラスとして定義してもよいが、インナークラスとして定義することが多いらしい。本記事では、受信クラス(メインアクティビティ)内で定義している。またアクション名も定義しなければならない。本記事では”testとしている。”
<application>
<receiver android:name=".MainActivity$MyReceiver">
<intent-filter>
<action android:name="test" />
</intent-filter>
</receiver>
</application>
###送信側
送信にはIntentを使う。アクション名を使ってIntentを生成し、そこに送信したい内容を詰め、送信メソッドで送る。
Intent intent = new Intent("test");
intent.putExtra("ブロードキャストテスト", "OK");
applicationCommon.sendBroadcast(intent);
###受信側
「登録」で述べたように、MyRecieverをMainActivityのインナークラスとして定義する。
このインナークラスは、引数なしのコンストラクタを持てないので、static修飾する必要がある。気を付けて頂きたい。
ブロードキャストが送信されると、マニフェストに登録されたレシーバクラスのonReceive()が動く。
そのメソッド内に行いたい処理を書けばよい。
MainActivity {
onCreate(){
}
public static MyReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Intentから値を取得する
}
}
}
##参考URL
http://mitoroid.com/category/android/android_broadcast_receiver.php