【1】 監(jiān)聽 撥打電話 的狀態(tài): 掛斷(空閑) --》 接聽 --》 掛斷
【注意】
public class PhoneReceiver extends BroadcastReceiver {
private int mOldState;
private int mCurrentState;
private boolean isSend = true;
@Override
public void onReceive(Context context, Intent intent) {
// 如果是去電
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
Log.e("lee","去電======================================");
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Service.TELEPHONY_SERVICE);
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
// 設(shè)置一個(gè)監(jiān)聽器
PhoneStateListener listener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// 注意,方法必須寫在super方法后面,否則incomingNumber無法獲取到值。
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
mOldState = TelephonyManager.CALL_STATE_IDLE;
Log.v("lee", "掛斷");
// ToastUtil.showToast("掛斷");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
// ToastUtil.showToast("接聽");
Log.v("lee", "接聽");
mCurrentState = TelephonyManager.CALL_STATE_OFFHOOK;
break;
case TelephonyManager.CALL_STATE_RINGING:
// ToastUtil.showToast("響鈴:來電號碼" + incomingNumber); // 輸出來電號碼
Log.v("lee", "響鈴:來電號碼" + incomingNumber);
break;
default:
break;
}
// 注意 不要在onCallStateChanged()方法 做邏輯判斷, 因?yàn)榭赡軙e調(diào)用多次。
if(mOldState == TelephonyManager.CALL_STATE_IDLE &&
mCurrentState == TelephonyManager.CALL_STATE_OFFHOOK){
mOldState = -1;
mCurrentState = -1;
if( isSend){
isSend = false;
// todo 具體邏輯
}else if( isSend){
isSend = false;
// todo 具體邏輯
}else if( isSend){
isSend = false;
// todo 具體邏輯
}
}
}
};
}
【2】注冊 廣播接收者
<receiver android:name="com.vest.receiver.PhoneReceiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>