Android监听来电和去电


Android中监听来电和去电,这种功能的实现也许会在一些项目中经常实现,尤其一些防盗软件,这里为大家分享一下很不错的Android监听来电和去电的源码:

要监听android打电话和接电话,只需下面2步骤

1.第一步,写一个Receiver继承自BroadcastReceiver

  1. import android.app.Service;  
  2. import android.content.BroadcastReceiver;  
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. import android.telephony.TelephonyManager;  
  6. import android.util.Log;  
  7.   
  8. public class PhoneStateBroadCastReceiver extends BroadcastReceiver  
  9. {  
  10.  private static final String TAG = "PhoneStateBroadCastReceiver";  
  11.   
  12.  private static boolean mIncomingFlag = false;  
  13.  private static String mIncomingNumber = null;  
  14.   
  15.  @Override  
  16.  public void onReceive(Context context, Intent intent)  
  17.  {  
  18.   // 如果是拨打电话   
  19.   if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL))  
  20.   {  
  21.    mIncomingFlag = false;  
  22.    String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);  
  23.    Log.i(TAG, "call OUT:" + phoneNumber);  
  24.   } else  
  25.   {  
  26.    // 如果是来电   
  27.    TelephonyManager tManager =  
  28.    (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);  
  29.    switch (tManager.getCallState())  
  30.    {  
  31.    case TelephonyManager.CALL_STATE_RINGING:  
  32.     mIncomingNumber = intent.getStringExtra("incoming_number");  
  33.     Log.i(TAG, "RINGING :" + mIncomingNumber);  
  34.     break;  
  35.    case TelephonyManager.CALL_STATE_OFFHOOK:  
  36.     if (mIncomingFlag)  
  37.     {  
  38.      Log.i(TAG, "incoming ACCEPT :" + mIncomingNumber);  
  39.     }  
  40.     break;  
  41.    case TelephonyManager.CALL_STATE_IDLE:  
  42.     if (mIncomingFlag)  
  43.     {  
  44.      Log.i(TAG, "incoming IDLE");  
  45.     }  
  46.     break;  
  47.    }  
  48.   }  
  49.  }  
  50.   
  51. }  

第二步:在AndroidManifest.xml,配置写好的Receiver,并拦截相应的BroadCastAction,

另外注意加上相应的权限:

  1. <receiver android:name=".broadcase.PhoneStateBroadCastReceiver">   
  2.             <intent-filter>  
  3.                <action android:name="android.intent.action.PHONE_STATE"/>            
  4.                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />  
  5.            </intent-filter>  
  6.   </receiver>  
  7. <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  8. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />  

相关内容