Androidアプリ開発者のためのTips集。今回は、BroadcastIntentをきっかけにアプリを起動させる方法について。例として、“端末の起動時”に自動的にアプリを立ち上げる方法を紹介する。
用途 | 便利 |
---|---|
カテゴリ | 連携 |
レベル | 応用 |
動作確認環境 | Android 2.3.1(GingerBread) エミュレータにて動作確認 |
備考 | 今回のTipsは上記環境で動作確認・検証を行っています |
前回「BroadcastIntentを受け取る」の解説では、既にアプリケーションが起動した状態でBroadcastIntentを受信していたが、今回は、BroadcastIntentをきっかけにアプリケーションを起動させる方法を説明する。
ここでは例として、“端末の起動時”に発生するBroadcastIntentをきっかけにアプリケーションを起動させる方法を紹介する。この方法は、Linuxのデーモンのように動作するサービスを作りたい場合に有効だ。
BroadcastIntentをきっかけにアプリケーションを起動させる手順は、以下の通りだ。
手順1.でBroadcastIntent受信時の処理内容を記述し、手順2.で受信するBroadcastIntentの種類を設定する。
今回は、端末の起動処理終了時に発生する以下のBroadcastIntentを受信することで、自動的なアプリケーションの起動を実現する。
android.intent.action.BOOT_COMPLETED
まずは、「BroadcastReceiver」のサブクラスを作成して、BroadcastIntentを受信した場合の処理を記述する。具体的には、BroadcastReceiver#onReceive()をオーバーライドする。
このとき、onReceive()メソッドにはパラメータとしてContextのインスタンスが渡されるので、これを使用して別の画面をスタートさせたり、別のサービスを起動させたりできる。
package jp.test.bootcomp; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyReceiver extends BroadcastReceiver{ // BroadcastIntentを受信した場合の処理 // @Override public void onReceive(Context context, Intent intent) { // Context を使って、別の画面を起動する Intent i = new Intent(context, HelloWorldActivity.class); i.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); context.startActivity(i); } }
作成したBroadcastReceiverのサブクラスは、ActivityやServiceと同じようにAndroidManifest.xmlに登録する。こうすることで、BroadcastIntent発生時に、自動的にBroadcastReceiverが起動するようになる。
BroadcastReceiverを登録する際は、<receiver>タグを記述する。このとき<receiver>の子要素として、<intent-filter>タグを記述して、受信するBroadcastIntentの種類を設定する。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.test.bootcomp" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <!-- 画面の登録 --> <activity android:name=".HelloWorldActivity" android:label="@string/app_name" > </activity> <!-- BroadcastReceiverの登録 --> <receiver android:name=".MyReceiver"> <!-- 受信するBroadcastIntentの種類を設定 --> <intent-filter> <!-- 端末の起動処理終了時に発生するBoradcast --> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application> <!-- 注意:「起動完了」のBroadcastを受信するには、パーミッションが必要 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> </manifest>
記載したMyReceiver.javaとAndroidManifest.xmlに適当な画面(HelloWorldActivity)を追加してアプリケーションを作成し、それを端末にインストールしたら、再起動をかける。
すると、MyReceiverクラスのonReceive()メソッドからHelloWorldActivity画面が起動される。
エミュレータなので分かりにくいが、既にバックグラウンドでHelloWorldActivityが起動されている。ロックを解除すると、すぐにHelloWorldActivityが表示される(画像2)(画像3)。
≫連載「Androidアプリケーション開発者のためのTips集」の目次
Copyright © ITmedia, Inc. All Rights Reserved.