要监听android打电话和接电话,只需下面2步骤
1.第一步,写一个Receiver继承自BroadcastReceiver
public class PhoneStatReceiver extends BroadcastReceiver{
? ? ? ?
? ? ? ? private static final String TAG = "PhoneStatReceiver";
? ? ? ?
//? ? ? ? private static MyPhoneStateListener phoneListener = new MyPhoneStateListener();
? ? ? ?
? ? ? ? private static boolean incomingFlag = false;
? ? ? ?
? ? ? ? private static String incoming_number = null;
?
? ? ? ? @Override
? ? ? ? public void onReceive(Context context, Intent intent) {
? ? ? ? ? ? ? ? //如果是拨打电话
? ? ? ? ? ? ? ? if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? incomingFlag = false;
? ? ? ? ? ? ? ? ? ? ? ? String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? Log.i(TAG, "call OUT:"+phoneNumber);? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? }else{? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? //如果是来电
? ? ? ? ? ? ? ? ? ? ? ? TelephonyManager tm =
? ? ? ? ? ? ? ? ? ? ? ?? ???(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? switch (tm.getCallState()) {
? ? ? ? ? ? ? ? ? ? ? ? case TelephonyManager.CALL_STATE_RINGING:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? incomingFlag = true;//标识当前是来电
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? incoming_number = intent.getStringExtra("incoming_number");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Log.i(TAG, "RINGING :"+ incoming_number);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case TelephonyManager.CALL_STATE_OFFHOOK:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(incomingFlag){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Log.i(TAG, "incoming ACCEPT :"+ incoming_number);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? case TelephonyManager.CALL_STATE_IDLE:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(incomingFlag){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Log.i(TAG, "incoming IDLE");? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? }
}
第二步:在AndroidManifest.xml,配置写好的Receiver,并拦截相应的BroadCastAction,
另外注意加上相应的权限。
<receiver android:name=".filter.PhoneStatReceiver">??
? ?? ?? ?? ?<intent-filter>
? ?? ?? ?? ?? ???<action android:name="android.intent.action.PHONE_STATE"/>? ?? ?? ???
? ?? ?? ?? ?? ???<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
? ?? ?? ?? ?</intent-filter>
</receiver>
?
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
? ? ? ? <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>