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 監聽去電則需要註冊一個廣播
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
需要監聽具體意圖和權限;
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
IntentFilter filter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
registerReceiver(receiver, filter);// 動態註冊廣播
@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);
}
}