今回はTelephonyManagerとPhoneStateListenerを使って回線の接続状況の変化を取得する方法を説明します。
Serviceを使う(1) LocalServiceによる常駐型アプリを参考に常駐アプリを作成して3Gの接続状況を表示するアプリなどを作成することができます。
今回の回線の接続状況以外にもPhoneStateListenerは着信イベントを取得することもできます。
それでは続きへどうぞ
パーミッションの設定
回線の接続状況を取得するためには、端末の情報にアクセスする必要があるため、マニフェストファイルにandroid.permission.READ_PHONE_STATEを記述する必要があります。
この記述を忘れると実行時にエラーでアプリケーションが強制終了するので注意してください。
AndroidManifest.xml
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
リスナの登録
TelephonyManagerにPhoneStateListenerを登録します。
回線の接続状況のイベントはPhoneStateListener.LISTEN_DATA_CONNECTION_STATEなので以下のように登録します。
TelephonyManager#listenメソッドで第1引数にリスナ(PhoneStateListenerクラスのインスタンス)、第2引数にどのようなイベントを受け取るか(今回は回線の状態変化であるLISTEN_DATA_CONNECTION_STATE)を指定します。
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
PhoneStateListener#onDataConnectionStateChanged
リスナの実装です。
回線の接続状況に変化があるとPhoneStateListenerクラスのonDataConnectionStateChangedメソッドが呼ばれます。このメソッドをオーバーライドして、任意の処理を記述します。
onDataConnectionStateChangedメソッドの引数はint型で、以下の意味を持ちます。
- 0:DATA_DISCONNECTED 切断
- 1:DATA_CONNECTING 接続中
- 2:DATA_CONNECTED 接続完了
切断、接続中、接続完了という3つの状態があり、その状態に変化があったときに通知が来ます。(メソッドが呼び出される)
下記のサンプルコードでは接続状況に変化が起きた場合にログを出力しています。
public PhoneStateListener phoneStateListener = new PhoneStateListener(){
@Override
public void onDataConnectionStateChanged(int state) {
/*
* DATA_DISCONNECTED = 0
* DATA_CONNECTING = 1
* DATA_CONNECTED = 2
*/
switch (state) {
case TelephonyManager.DATA_DISCONNECTED:
Log.d(TAG, "DATA_DISCONNECTED");
break;
case TelephonyManager.DATA_CONNECTING:
Log.d(TAG, "DATA_CONNECTING");
break;
case TelephonyManager.DATA_CONNECTED:
Log.d(TAG, "DATA_CONNECTED");
break;
default:
return;
}
super.onDataConnectionStateChanged(state);
}
};