android做到監聽來電,和監聽去電

1 監聽來電不用註冊廣播接收者,只需自定義一個監聽類繼承PhoneStateListener

代碼如下

首先要添加權限


<uses-permission android:name="android.permission.READ_PHONE_STATE" />  

        private TelephonyManager tm;
    private MyListener listener;

              tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
listener = new MyListener();
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);// 監聽來電的狀態

class    MyListener extends PhoneStateListener {

//繼承PhoneStateListener可以做到監聽來電,要做到監聽打電話,則需重新定義一個廣播接受者
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {

                                 /*int state,電話的狀態

                                    String incomingNumber來電號碼

                                    */

         case TelephonyManager.CALL_STATE_RINGING:// 電話正在打電話

                                /*下面邏輯是我顯示來電號碼在桌面上,自定義了一個桌面吐司*/
String address = AddresDao.getAddress(incomingNumber);// 
showToast(address);
break;
case TelephonyManager.CALL_STATE_IDLE:// // 電話閒置狀態
if (mWM != null && view != null) {
mWM.removeView(view);//// 從window中移除view
view = null;
}
break;
default:
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}

2 監聽去電則需要註冊一個廣播

配置文件中   
<receiver android:name=".receiver.OutCallReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
        </receiver>

 需要監聽具體意圖和權限;

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>


  
java代碼中
               private OutCallReceiver receiver;
                   receiver = new OutCallReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
registerReceiver(receiver, filter);// 動態註冊廣播

/*定義一個廣播接收者*/
class OutCallReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
String number = getResultData();// 獲取去電電話號碼
String address = AddresDao.getAddress(number);
// Toast.makeText(context, address, Toast.LENGTH_LONG).show();
          showToast(address);
}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章