您的位置:首页 > 移动开发 > Android开发

android监听来电去电广播

2013-02-01 18:48 489 查看
要监听android打电话和接电话,只需下面2步骤

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

[java]
view plaincopyprint?

class MyPhoneStateListener extends PhoneStateListener {

@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch(state) {
case TelephonyManager.CALL_STATE_IDLE: //空闲

break;
case TelephonyManager.CALL_STATE_RINGING: //来电

break;
case TelephonyManager.CALL_STATE_OFFHOOK: //摘机(正在通话中)

break;
}
}

}

//获取电话通讯服务
TelephonyManager tpm = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
//创建一个监听对象,监听电话状态改变事件

tpm.listen(new MyPhoneStateListener(),
PhoneStateListener.LISTEN_CALL_STATE);

class MyPhoneStateListener extends PhoneStateListener {

@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch(state) {
case TelephonyManager.CALL_STATE_IDLE: //空闲
break;
case TelephonyManager.CALL_STATE_RINGING: //来电
break;
case TelephonyManager.CALL_STATE_OFFHOOK: //摘机(正在通话中)
break;
}
}

}

//获取电话通讯服务
TelephonyManager tpm = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
//创建一个监听对象,监听电话状态改变事件
tpm.listen(new MyPhoneStateListener(),
PhoneStateListener.LISTEN_CALL_STATE);


权限:
<uses-permission
android:name="android.permission.READ_PHONE_STATE"></uses-permission>

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

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

来电action为TelephonyManager.ACTION_PHONE_STATE_CHANGED

去电action为Intent.ACTION_NEW_OUTGOING_CALL

[java]
view plaincopyprint?

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;
}
}
}
}

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,

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

[html]
view plaincopyprint?

<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: