連載
» 2012年02月20日 11時30分 UPDATE

Android Tips(8):端末起動と同時にアプリケーションを起動させる

Androidアプリ開発者のためのTips集。今回は、BroadcastIntentをきっかけにアプリを起動させる方法について。例として、“端末の起動時”に自動的にアプリを立ち上げる方法を紹介する。

[秋本耕平(イーフロー),@IT MONOist]
Android Tips

Tips概要と動作検証環境

用途 便利
カテゴリ 連携
レベル 応用
動作確認環境 Android 2.3.1(GingerBread) エミュレータにて動作確認
備考 今回のTipsは上記環境で動作確認・検証を行っています


Tips 8:端末起動と同時にアプリケーションを起動させる

 前回「BroadcastIntentを受け取る」の解説では、既にアプリケーションが起動した状態でBroadcastIntentを受信していたが、今回は、BroadcastIntentをきっかけにアプリケーションを起動させる方法を説明する。

 ここでは例として、“端末の起動時”に発生するBroadcastIntentをきっかけにアプリケーションを起動させる方法を紹介する。この方法は、Linuxのデーモンのように動作するサービスを作りたい場合に有効だ。

概要

 BroadcastIntentをきっかけにアプリケーションを起動させる手順は、以下の通りだ。

  1. BroadcastReceiverのサブクラスを作成する
  2. AndroidManifest.xmlの記述に、1.のBroadcastReceiverを追加する

 手順1.でBroadcastIntent受信時の処理内容を記述し、手順2.で受信するBroadcastIntentの種類を設定する。

 今回は、端末の起動処理終了時に発生する以下のBroadcastIntentを受信することで、自動的なアプリケーションの起動を実現する。

    android.intent.action.BOOT_COMPLETED

手順1:BroadcastReceiverのサブクラスを作成する

 まずは、「BroadcastReceiver」のサブクラスを作成して、BroadcastIntentを受信した場合の処理を記述する。具体的には、BroadcastReceiver#onReceive()をオーバーライドする。

 このとき、onReceive()メソッドにはパラメータとしてContextのインスタンスが渡されるので、これを使用して別の画面をスタートさせたり、別のサービスを起動させたりできる。

例:別の画面を起動するBroadcastReceiverサブクラスの実装

    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);
        }
    }


手順2:「AndroidManifest.xml」にBroadcastReceiverの記述を追加

 作成したBroadcastReceiverのサブクラスは、ActivityやServiceと同じようにAndroidManifest.xmlに登録する。こうすることで、BroadcastIntent発生時に、自動的にBroadcastReceiverが起動するようになる。

 BroadcastReceiverを登録する際は、<receiver>タグを記述する。このとき<receiver>の子要素として、<intent-filter>タグを記述して、受信するBroadcastIntentの種類を設定する。

例:BreadcastReceiverをAndroidManifest.xmlに登録する

    <?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画面が起動される。

画像1 インストール後、端末(エミュレータ)を再起動 インストール後、端末(エミュレータ)を再起動

 エミュレータなので分かりにくいが、既にバックグラウンドでHelloWorldActivityが起動されている。ロックを解除すると、すぐにHelloWorldActivityが表示される(画像2)(画像3)。

ロックを解除する 画像2 ロックを解除する
HelloWorldActivityが表示される 画像3 HelloWorldActivityが表示される

Android コーナー

Androidコーナー
「Android(アンドロイド)」の組み込み機器への適用からアプリ開発、レポート、ニュースなどさまざまな技術情報・最新動向をお届けする!!

>>コーナーTOPはこちらから


Copyright© 2017 ITmedia, Inc. All Rights Reserved.