当前位置: 代码迷 >> Android >> android-监听复电和去电
  详细解决方案

android-监听复电和去电

热度:60   发布时间:2016-05-01 17:17:52.0
android-监听来电和去电

要监听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>

  相关解决方案