摘要

通过一个OutCall的广播通知其他程序,”有人向外拨电话了!!!号码是131....”,而对于来电的话,则是通过一个系统级的服务TelephonyManager来管理跟通讯有关的活动与参数,是不是很像候老师,有什么就业的难题都找他?TelephonyManager就是这样的,比方说想获取sim卡序列号,电话的通话状态(”有电话了打进来了!!!号码是131....”,)等等,都找这个Android版的候老师!!!既然是这样的,那么这个广播与管理者就是我们掌握的要点了。

1.采用代码注册拦截OutGoingCall广播

>权限

<!-- 外拨电话的广播拦截权限 -->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

>代码注册广播

.外拨 [拦截一个Action为Intent.ACTION_NEW_OUTGOING_CALL的外拨广播 ]

// 创建过滤器
IntentFilter filter = new IntentFilter();
// 广播类型
filter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);
filter.setPriority(1000);
// 注册广播
registerReceiver(outCallReceiver, filter);

注意

代码注册的广播在不用的时候要进行移除

// 3.回调:条件 stopService 仅有一次
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("--归属地服务----onDestroy---销毁");
// 移除注册
unregisterReceiver(outCallReceiver);
}

>号码获取

// 拦截外拨的接收者
private BroadcastReceiver outCallReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 获取号码头
String number = super.getResultData();
System.out.println("---outCallReciever-onReceive number=" + number);
}
};

2.拦截来电

>注册监听

常见的注册监听器的方式为manager.setON...Listener(); register...Listener  等 但是TelephonyManager这个监听真的不是很经典,或者说很变态!!!

// ##############TelephonyManager 通讯相关的服务 sim/通话状态 监听器拦截的
manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
// 监听通话状态
manager.listen(mPhoneStateListener, // 通话状态监听器
PhoneStateListener.LISTEN_CALL_STATE// 设置监听类型
);

注意

用完成不需要这个状态的话要进行移除操作

// 移除话状态监听
manager.listen(mPhoneStateListener, // 通话状态监听器
PhoneStateListener.LISTEN_NONE// 设置监听类型
);

>事件处理

private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
// 监听状态改变
@Override
public void onCallStateChanged(//
int state,// 状态
String incomingNumber// 来电号码
) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:// 没有电话
dismissDialog();
break;
case TelephonyManager.CALL_STATE_RINGING:// 响铃
dealNumber(incomingNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:// 接听
break;
}
}
};


注意