我们要实现在Android中监听接电话和打电话,其实很简单,只需要两个步骤,本文以实例的形式进行讲解。

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

Java代码
  1. public class PhoneStatReceiver extends BroadcastReceiver{   
  2.         private static final String TAG = "PhoneStatReceiver";    
  3. //        private static MyPhoneStateListener phoneListener = new MyPhoneStateListener();   
  4.         private static boolean incomingFlag = false;  
  5.         private static String incoming_number = null;  
  6.  
  7.         @Override    
  8.         public void onReceive(Context context, Intent intent) {    
  9.                 //如果是拨打电话    
  10.                 if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){                           
  11.                         incomingFlag = false;  
  12.                         String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);          
  13.                         Log.i(TAG, "call OUT:"+phoneNumber);                           
  14.                 }else{                           
  15.                         //如果是来电    
  16.                         TelephonyManager tm =    
  17.                             (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);                         
  18.  
  19.                         switch (tm.getCallState()) {    
  20.                         case TelephonyManager.CALL_STATE_RINGING:    
  21.                                 incomingFlag = true;//标识当前是来电    
  22.                                 incoming_number = intent.getStringExtra("incoming_number");    
  23.                                 Log.i(TAG, "RINGING :"+ incoming_number);    
  24.                                 break;    
  25.                         case TelephonyManager.CALL_STATE_OFFHOOK:                                   
  26.                                 if(incomingFlag){    
  27.                                         Log.i(TAG, "incoming ACCEPT :"+ incoming_number);    
  28.                                 }    
  29.                                 break;    
  30.                         case TelephonyManager.CALL_STATE_IDLE:                                   
  31.                                 if(incomingFlag){    
  32.                                         Log.i(TAG, "incoming IDLE");                                   
  33.                                 }    
  34.                                 break;    
  35.                         }    
  36.                 }    
  37.         }    
  38. }  

       第二步:在AndroidManifest.xml,配置写好的Receiver,并拦截相应的BroadCastAction, 另外注意加上相应的权限

XML/HTML代码
  1. <receiver android:name=".filter.PhoneStatReceiver">    
  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.   
  8. <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>  
  9. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>  
本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/example/336.html
2012年12月29日
发布:鸡啄米 分类:Android开发实例 浏览: 评论:1