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