AndroidTips | IntentとBroadcastについて

この記事は2014年2月5日に書かれたものです。内容が古い可能性がありますのでご注意ください。


IntentとBroadcastについて

みなさん、こんにちは。
今回も当校の授業の中で生徒さんが混乱しがちな点を解説します。

IntentとBroadcastの違いがよくわからない。
という方が非常に多いので、おおまかにまとめてみました。

Intent

Intentってなんですか?
僕はいつも「お手紙」と説明しています。
他のjavaファイル等を起動するための「お手紙」です。
そしてそのお手紙を運ぶ郵便屋さんが「Androidシステム」です。
Intentには大きく分けて2種類のIntentが存在します。

  • 明示的Intent:住所特定のお手紙
  • 明示的Intentは「送付先」と「送付元」をお手紙に明確に示しているものです。
    例えば「この画面がら、あの画面に移動する」や「このファイルから、あのファイルを立ち上げる」といった具合です。
    1

    一例として、実際のプログラムでは以下のように記述します。

    Intent i = new Intent();
    i.setClass(MainActivity.this, SubActivity.class);
    startActivity(i);
    
    1. 「真っ白いお手紙」を作成
    2. 「送付先」と「送付元」をお手紙に記述
    3. 「郵便屋さん」にお手紙を投げる


  • 暗黙的Intent:住所不定のお手紙
  • 暗黙的Intentは、「送付先」と「送付元」をお手紙に明確に示していないものです。
    一番簡素なものだと「動作命令」と「必要なデータ」のみを記述します。
    具体的には下記のように「ACTION_CALL(電話する)」と「tel:08012345678(電話番号)」指定します。
    これにより「郵便屋さん(Androidシステム)」は、「電話アプリを立ち上げればいいんだな!」と判断し、「電話アプリ」を起動します。つまり、「現在の画面から、電話アプリの画面に移動する」ことになります。
    1

    一例として、実際のプログラムでは以下のように記述します。

    Uri uri = Uri.parse("tel:09012345678");
    Intent i = new Intent();
    i.setAction(Intent.ACTION_CALL);
    i.setData(uri);
    startActivity(i);
    
    1. 電話番号をuriというデータ型に変換(お手紙に記載するには、uriというデータ型に変換することが必要)
    2. 「真っ白いお手紙」を作成
    3. お手紙に「アクション」を記述
    4. お手紙に先ほど変換した「データ」を記述
    5. 「郵便屋さん」にお手紙を投げる


このようにしてAndroidでは画面を移動させたり、バックグラウンド処理を行う為のjavaファイル等を起動させます。

Broadcast

次にBroadcastです。
こちらは端的に言うと最低限「ACTION(動作命令)」だけ記述するお手紙です。
つまりアクションのみが記述されている暗黙的Intentです。
そしてこのアクション、独自に作成することが可能です。
1

「さすがにアクションだけだと郵便屋さん、わからなくない?」
はい、そうなんです。
わかりません。

それ故、受け取らせる相手に「表札」を付けなければなりません。
この「表札」には「アクション」が記載されています。
1

この表札を付けると郵便屋さんもわかりますね!

表札の付け方は何通りかあります。
例えばマニフェストファイル内で記述する場合、以下のように記述します。

<receiver android:name=".CalcBmiReceiver" >
    <intent-filter >
        <action android:name="com.example.intent.action.ACTION_CALC_BMI" />
    </intent-filter>
</receiver>

ここではBroadcastReceiverクラスを継承しているCalcBmiReceiverクラスの中に、「intent-filter」タグを用いて、独自に作成した「アクション」を定義しています。

イメージ図で確認

図を見ながら確認してみましょう。
1

これはあるアプリの動きを示しています。
具体的には以下のような流れになります。

  1. ActivityからServiceを起動(Intentを送信)しダウンロード処理を開始:startActivity()
  2. ダウンロードが完了したら、独自アクションが記述されたIntentに「ダウンロード完了」と記述し送信(Broadcast):sendBroadcast()
  3. Androidは、そのアクションが表札に書かれたファイルにIntentを送信(Broadcast)
  4. 表札を受け取る予定のファイルは、Intentを受け取り「ダウンロード完了」と画面にポップアップを出す

イメージは湧きましたか?
それではまた次回!

  • このエントリーをはてなブックマークに追加

PAGE TOP