读书人

android兑现电话状态监控

发布时间: 2012-06-29 15:48:47 作者: rapoo

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>

读书人网 >Android

热点推荐