wで回線の接続状況の変化を取得する
|今回はTelephonyManagerとPhoneStateListenerを使って回線の接続状況の変化を取得する方法を説明します。
Serviceを使う(1) LocalServiceによる常駐型アプリを参考に常駐アプリを作成して3Gの接続状況を表示するアプリなどを作成することができます。
今回の回線の接続状況以外にもPhoneStateListenerは着信イベントを取得することもできます。
それでは続きへどうぞ
パーミッションの設定
回線の接続状況を取得するためには、端末の情報にアクセスする必要があるため、マニフェストファイルにandroid.permission.READ_PHONE_STATEを記述する必要があります。
この記述を忘れると実行時にエラーでアプリケーションが強制終了するので注意してください。
AndroidManifest.xml
1 | < 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)を指定します。
1 2 | 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つの状態があり、その状態に変化があったときに通知が来ます。(メソッドが呼び出される)
下記のサンプルコードでは接続状況に変化が起きた場合にログを出力しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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); } }; |