BroadcastIntentを受け取る:Androidアプリケーション開発者のためのTips集(7)
Androidアプリ開発者のためのTips集。電池残量の減少やネットワーク状態の変化など、システム全体にかかわる情報は「BroadcastIntent」という特殊なIntentを使って、全てのアプリに発信される。各アプリはこれを受信することで、端末の変化に応じた処理を実装できる。
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サイトを参照するとよい。
- Intent | Android Developers(http://developer.android.com/reference/android/content/Intent.html)
その他、「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で以下のようなメッセージが表示される。
≫連載「Androidアプリケーション開発者のためのTips集」の目次
Copyright © ITmedia, Inc. All Rights Reserved.


