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);
权限:
<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;
}
}
}
}
第二步:在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>
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>
相关文章推荐
- android监听来电去电广播 .
- android监听来电去电广播
- [Android] 使用广播接收器Braodcast Receiver 监听手机来电 去电 挂断的事
- Android 通过注册广播,实时监听网络连接与断开状态的变化
- android屏幕加解锁事件广播的监听
- android_广播接收者概念_监听SD卡入门案例
- android 使用广播接收者监听短信和拦截外拨电话
- Android-->检测内置/外置SD卡存储卡,枚举所有挂载点(通过反射实现),监听SD卡广播
- Android利用广播监听设备网络连接(断网)的变化情况
- Android监听器实现(二)Broadcast方式对通话状态(来电,拨号,挂机)的精确监听
- Android监听来电和去电
- network: android 使用广播监听网络状态
- android 使用广播监听网络状态
- android中监听wifi广播的方法
- Android监听来电和去电
- Android 监听wifi广播的两种方式
- Android学习小记----监听电量的变化(不能静态注册的广播)
- Android开发-来电监听-步骤方法
- 文章标题android来电通过广播实现电话自动挂断
- Android TelephonyManager 监听手机来电