2012年2月25日土曜日

[Android SDK] 電話の着信を監視する

TelephonyManagerを利用すると、電話の着信/通話中/待機時を検知することができる。
まずはシステムサービスからTelephonyManagerを取得し、listenでリスナーを登録する。
※Permissonに"android.permission.READ_PHONE_STATE"の登録が必要。
// 電話状態監視リスナー
PhoneStateListener mListener = new PhoneStateListener() { 
 public void onCallStateChanged(int state, String number) {
  switch(state) {
  case TelephonyManager.CALL_STATE_RINGING:// 着信時
   Log.d(TAG, "PhoneState: CALL_STATE_RINGING");
   break;
  case TelephonyManager.CALL_STATE_OFFHOOK:// 通話時
   Log.d(TAG, "PhoneState: CALL_STATE_OFFHOOK");
   break;
  case TelephonyManager.CALL_STATE_IDLE:// 待機時(リスナー登録時も呼ばれるようだ)
   Log.d(TAG, "PhoneState: CALL_STATE_IDLE");
   break;
  }
 }
};
TelephonyManager m = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
m.listen(mListener, PhoneStateListener.LISTEN_CALL_STATE);
不在着信の検知は、前回の電話状態を記録することで可能です。
・通話終了=CALL_STATE_RINGING -> CALL_STATE_OFFHOOK -> CALL_STATE_IDLE
・不在着信=CALL_STATE_RINGING -> CALL_STATE_IDLE

0 件のコメント:

コメントを投稿