wで回線の接続状況の変化を取得する


今回は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);
	}
};
3 Comments