Android来电拦截及来电转移

1. 电话拦截
这个功能大家可能都知道了,就是利用反射原理调用ITelephony的隐藏方法来实现。这个就不说了,在附件的代码里有。
2.拦截后提示忙音/空号/已关机/已停机
这个功能其实是要用到MMI指令,具体如何设置呼叫转移的指定可以参考这里 http://baike.baidu.com/view/206402.html?fromTaglist 。
在本文中我们会用到“遇忙转移”转移的功能。中国移动的设置方式是 **67#电话号码#,取消方式为 ##67#。”无条件转移“用21代替67即可。这两个指令可以直接在手机的拨号界面输入并拨号测试。ITelephony的endcall方法挂断电话后,会提示电话忙。如果事前设置好了忙时转移到一个空号/已关机/已停机的电话号码,就会提示您拨的电话号码是空号/已关机/已停机。

//先静音处理
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
try {
//挂断电话
iTelephony.endCall();
} catch (RemoteException e) {
e.printStackTrace();
}
//再恢复正常铃声
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

//判断号码是否存在
public static boolean IsValidMobileNo(String mobiles){
Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}

//呼叫转移
switch (v.getId()) {
case R.id.change: //转移
if(phoneNum!=null&&phoneNum.length()>0){
if(IsValidMobileNo(phoneNum)){
intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
if(changeType==0){
intent.setData(Uri.parse("tel:**21*"+phoneNum+"%23")); //始终进行呼叫转移
}else if(changeType==1){
intent.setData(Uri.parse("tel:**67*"+phoneNum+"%23")); //占线时进行呼叫转移
}else if(changeType==2){
intent.setData(Uri.parse("tel:**61*"+phoneNum+"%23")); //无应答时进行呼叫转移
}else if(changeType==3){
intent.setData(Uri.parse("tel:**62*"+phoneNum+"%23")); //无法接通时进行呼叫转移
}
startActivity(intent);
}else{
Toast.makeText(this, getString(R.string.app_name08), Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(this, getString(R.string.app_name07), Toast.LENGTH_SHORT).show();
}
break;
case R.id.cancle: //取消
intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
if(changeType==0){
intent.setData(Uri.parse("tel:%23%2321%23"));
}else if(changeType==1){
intent.setData(Uri.parse("tel:%23%2367%23"));
}else if(changeType==2){
intent.setData(Uri.parse("tel:%23%2361%23"));
}else if(changeType==3){
intent.setData(Uri.parse("tel:%23%2362%23"));
}
startActivity(intent);
break;
case R.id.query: //查询
intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
if(changeType==0){
intent.setData(Uri.parse("tel:*%2321%23"));
}else if(changeType==1){
intent.setData(Uri.parse("tel:*%2367%23"));
}else if(changeType==2){
intent.setData(Uri.parse("tel:*%2361%23"));
}else if(changeType==3){
intent.setData(Uri.parse("tel:*%2362%23"));
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
break;
}

 

 参考链接:http://blog.csdn.net/liushaogeng/article/details/6592916

代码下载链接:http://download.csdn.net/detail/klcf0220/7170513

转载于:https://www.cnblogs.com/klcf0220/p/3655867.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值