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