Hatena::Groupandroid

lnzntの Android 日記 このページをアンテナに追加 RSSフィード

2012年04月10日(火)

BroadcastReceiver

21:25 | BroadcastReceiver - lnzntの Android 日記 を含むブックマーク はてなブックマーク - BroadcastReceiver - lnzntの Android 日記 BroadcastReceiver - lnzntの Android 日記 のブックマークコメント

インテントには、フィルタリングされたアクティビティだけが受けとるものではなく、ブロードキャストされて必要なアプリケーション全てが受け取るものがあります。

これを受けとるには、BroadcastReceiver を作成します。

----

BOOT_COMPLETED(端末の起動完了通知)インテントを受け取ったら HelloActivity を開始するように、Hello を改造してみます。

BroadcastReceiver 作成

以下の BroadcastReceiver (名前は BootReceiver)を作成します。

注意点ですが、ここで投げるインテントには以下のフラグを立てます。

  • FLAG_ACTIVITY_NEW_TASK フラグ

src/com.example.hello/BootReceiver.java

package com.example.hello;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent recvIntent) {
		
	Log.d("BootReceiver", "onReceive() called.");
	Log.v("BootReceiver", "Intent: " + recvIntent);
	
	Intent intent = (new Intent(context, HelloActivity.class));
        context.startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
    }
}

BroadcastReceiver をマニフェストに登録します。

<application ...
               :
        <receiver android:name=".BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
              :
</application>

後はビルドしてアプリケーションをエミュレータにインストールします。

テスト

エミュレータのシャットダウンができないので、ホストの adb からインテントを投げてテストします。

$ adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

やってみたところ、Hello が起動しました。LogCat でログも確認できました。

----

BroadcastReceiver の動的な登録には、Context.registerReceiver();を使うようです。