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

Android Tips(7):BroadcastIntentを受け取る

Androidアプリ開発者のためのTips集。電池残量の減少やネットワーク状態の変化など、システム全体にかかわる情報は「BroadcastIntent」という特殊なIntentを使って、全てのアプリに発信される。各アプリはこれを受信することで、端末の変化に応じた処理を実装できる。

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

Tips概要と動作検証環境

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


Tips 7:BroadcastIntentを受け取る

 電池残量の減少やネットワーク状態の変化など、システム全体にかかわる情報は「BroadcastIntent」という特殊なIntentを使って、全てのアプリケーションに向けて発信される。

 各アプリケーションでは、このBroadcastIntentを受信することで、端末の変化に応じた処理を実装することができる。

情報の種類

 発信される情報の種類は、BroadcastIntentの“action”要素で見分けることができる。以下に、BroadcastIntentを使って発信される主な情報を示す(表1)。

情報の内容 Intentのaction要素
時刻が変化した(分単位) android.intent.action.TIME_TICK
端末設定が変わった android.intent.action.CONFIGURATION_CHANGED
アプリケーションがインストールされた android.intent.action.PACKAGE_ADDED
アプリケーションが削除された android.intent.action.PACKAGE_REMOVED
バッテリー残量が変化した android.intent.action.BATTERY_CHANGED
端末が電源に接続された android.intent.action.ACTION_POWER_CONNECTED
端末が電源から切断された android.intent.action.ACTION_POWER_DISCONNECTED
端末がシャットダウンした android.intent.action.ACTION_SHUTDOWN
ネットワーク状態が変わった android.net.wifi.WIFI_STATE_CHANGED
表1 BroadcastIntentを使って発信される主な情報

 上記以外にも、いろいろな情報がBroadcastIntentにより発信される。基本的なBroadcastIntentについては、android.content.Intentクラスに定義されているので、下記のWebサイトを参照するとよい。

 その他、「DownloadManager」「TelephonyManager」「UiModeManager」「WifiManager」など、一部のシステムサービスからもBroadcastIntentにより情報が発信される。

BroadcastIntentの受信方法

 BroadcastIntentを受信するには、「BroadcastReceiver」を使用する。具体的には、受信するBroadcastIntentの種類を指定する「IntentFilter」と受信時の動作を記述した「BroadcastReceiver」を作成し、Activityに登録する。

 なお、登録したBroadcastReceiverは、不要になった時点で“登録解除”しなくてはならない。

BroadcastIntent受信のサンプル

 例えば、端末の電源への接続/切断に対応させる場合には、以下のように記述する。

例:BroadcastIntent受信のサンプル

    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Bundle;
    import android.widget.Toast;
 
    public class BroadcastTestActivity extends Activity {
 
        // BroadcastReceiver
        private BroadcastReceiver mReceiver;
 
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
 
            // 受信する情報の種類を設定
            // 電源接続・切断の通知を受け取る
            IntentFilter filter = new IntentFilter();
            filter.addAction( Intent.ACTION_POWER_CONNECTED );
            filter.addAction( Intent.ACTION_POWER_DISCONNECTED );
 
            // 受信した場合の処理の記述
            mReceiver = new BroadcastReceiver(){
                @Override
                public void onReceive( Context context, Intent intent ){
                    // Toast で受信内容を確認
                    Toast.makeText(context, "Receive broadcast:" + intent.getAction(),
                                   Toast.LENGTH_LONG ).show();
                }
            };
 
            // BroadcastReceiverを登録する
            this.registerReceiver( mReceiver, filter );
        }
 
        @Override
        public void onDestroy(){
            super.onDestroy();
 
            // 終了時に、BroadcastReceiverを登録解除する
            this.unregisterReceiver( mReceiver );
        }
    }


 端末を電源に接続/切断すると、Toastで以下のようなメッセージが表示される。

電源接続・切断通知の受信(1) 画像1 電源接続・切断通知の受信(1)/端末が電源に接続された場合
電源接続・切断通知の受信(2) 画像2 電源接続・切断通知の受信(2)/端末が電源から切断された場合

Android コーナー

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

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


Copyright© 2017 ITmedia, Inc. All Rights Reserved.