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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。