Android监听来电和去电

要监听android打电话和接电话,只需下面2步骤
第一步,写一个Receiver继承自BroadcastReceiver
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
 
public class PhoneStateBroadCastReceiver extends BroadcastReceiver
{
 private static final String TAG = "PhoneStateBroadCastReceiver";
 
 private static boolean mIncomingFlag = false;
 private static String mIncomingNumber = null;
 
 @Override
 public void onReceive(Context context, Intent intent)
 {
  // 如果是拨打电话
  if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL))
  {
   mIncomingFlag = false;
   String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
   Log.i(TAG, "call OUT:" + phoneNumber);
  } else
  {
   // 如果是来电
   TelephonyManager tManager =
   (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
   switch (tManager.getCallState())
   {
   case TelephonyManager.CALL_STATE_RINGING:
    mIncomingNumber = intent.getStringExtra("incoming_number");
    Log.i(TAG, "RINGING :" + mIncomingNumber);
    break;
   case TelephonyManager.CALL_STATE_OFFHOOK:
    if (mIncomingFlag)
    {
     Log.i(TAG, "incoming ACCEPT :" + mIncomingNumber);
    }
    break;
   case TelephonyManager.CALL_STATE_IDLE:
    if (mIncomingFlag)
    {
     Log.i(TAG, "incoming IDLE");
    }
    break;
   }
  }
 }
 
}
第二步:在AndroidManifest.xml,配置写好的Receiver,并拦截相应的BroadCastAction,
另外注意加上相应的权限
<receiver android:name=".broadcase.PhoneStateBroadCastReceiver"> 
            <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 android:name="android.permission.PROCESS_OUTGOING_CALLS" />
posted @ 2012-05-04 10:54  与时俱进  阅读(4537)  评论(0编辑  收藏  举报
友情链接:同里老宅院民居客栈