Androidアプリ開発者のためのTips集。電池残量の減少やネットワーク状態の変化など、システム全体にかかわる情報は「BroadcastIntent」という特殊なIntentを使って、全てのアプリに発信される。各アプリはこれを受信することで、端末の変化に応じた処理を実装できる。
用途 | 基本 |
---|---|
カテゴリ | 連携 |
レベル | 中級 |
動作確認環境 | Android 2.3.1(GingerBread) エミュレータにて動作確認 |
備考 | 今回のTipsは上記環境で動作確認・検証を行っています |
電池残量の減少やネットワーク状態の変化など、システム全体にかかわる情報は「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を受信するには、「BroadcastReceiver」を使用する。具体的には、受信するBroadcastIntentの種類を指定する「IntentFilter」と受信時の動作を記述した「BroadcastReceiver」を作成し、Activityに登録する。
なお、登録したBroadcastReceiverは、不要になった時点で“登録解除”しなくてはならない。
例えば、端末の電源への接続/切断に対応させる場合には、以下のように記述する。
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で以下のようなメッセージが表示される。
≫連載「Androidアプリケーション開発者のためのTips集」の目次
Copyright © ITmedia, Inc. All Rights Reserved.