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.
組み込み開発の記事ランキング
コーナーリンク