IntentとBroadcastについて
みなさん、こんにちは。
今回も当校の授業の中で生徒さんが混乱しがちな点を解説します。
IntentとBroadcastの違いがよくわからない。
という方が非常に多いので、おおまかにまとめてみました。
Intent
Intentってなんですか?
僕はいつも「お手紙」と説明しています。
他のjavaファイル等を起動するための「お手紙」です。
そしてそのお手紙を運ぶ郵便屋さんが「Androidシステム」です。
Intentには大きく分けて2種類のIntentが存在します。
- 明示的Intent:住所特定のお手紙
明示的Intentは「送付先」と「送付元」をお手紙に明確に示しているものです。
例えば「この画面がら、あの画面に移動する」や「このファイルから、あのファイルを立ち上げる」といった具合です。
一例として、実際のプログラムでは以下のように記述します。
Intent i = new Intent(); i.setClass(MainActivity.this, SubActivity.class); startActivity(i);
- 「真っ白いお手紙」を作成
- 「送付先」と「送付元」をお手紙に記述
- 「郵便屋さん」にお手紙を投げる
暗黙的Intentは、「送付先」と「送付元」をお手紙に明確に示していないものです。
一番簡素なものだと「動作命令」と「必要なデータ」のみを記述します。
具体的には下記のように「ACTION_CALL(電話する)」と「tel:08012345678(電話番号)」指定します。
これにより「郵便屋さん(Androidシステム)」は、「電話アプリを立ち上げればいいんだな!」と判断し、「電話アプリ」を起動します。つまり、「現在の画面から、電話アプリの画面に移動する」ことになります。
一例として、実際のプログラムでは以下のように記述します。
Uri uri = Uri.parse("tel:09012345678"); Intent i = new Intent(); i.setAction(Intent.ACTION_CALL); i.setData(uri); startActivity(i);
- 電話番号をuriというデータ型に変換(お手紙に記載するには、uriというデータ型に変換することが必要)
- 「真っ白いお手紙」を作成
- お手紙に「アクション」を記述
- お手紙に先ほど変換した「データ」を記述
- 「郵便屋さん」にお手紙を投げる
このようにしてAndroidでは画面を移動させたり、バックグラウンド処理を行う為のjavaファイル等を起動させます。
Broadcast
次にBroadcastです。
こちらは端的に言うと最低限「ACTION(動作命令)」だけ記述するお手紙です。
つまりアクションのみが記述されている暗黙的Intentです。
そしてこのアクション、独自に作成することが可能です。
「さすがにアクションだけだと郵便屋さん、わからなくない?」
はい、そうなんです。
わかりません。
それ故、受け取らせる相手に「表札」を付けなければなりません。
この「表札」には「アクション」が記載されています。
この表札を付けると郵便屋さんもわかりますね!
表札の付け方は何通りかあります。
例えばマニフェストファイル内で記述する場合、以下のように記述します。
<receiver android:name=".CalcBmiReceiver" > <intent-filter > <action android:name="com.example.intent.action.ACTION_CALC_BMI" /> </intent-filter> </receiver>
ここではBroadcastReceiverクラスを継承しているCalcBmiReceiverクラスの中に、「intent-filter」タグを用いて、独自に作成した「アクション」を定義しています。
イメージ図で確認
これはあるアプリの動きを示しています。
具体的には以下のような流れになります。
- ActivityからServiceを起動(Intentを送信)しダウンロード処理を開始:startActivity()
- ダウンロードが完了したら、独自アクションが記述されたIntentに「ダウンロード完了」と記述し送信(Broadcast):sendBroadcast()
- Androidは、そのアクションが表札に書かれたファイルにIntentを送信(Broadcast)
- 表札を受け取る予定のファイルは、Intentを受け取り「ダウンロード完了」と画面にポップアップを出す
イメージは湧きましたか?
それではまた次回!