呼叫转移场景
呼叫转移一般有以下几种场景:
-
无条件转移(始终转移):不管手机当前处于何种状态,来电都会被转移到指定的电话号码上,自己的手机将不会有任何反应。
-
遇忙转移(占线转移):在自己的手机正处于通话状态时,来电将会被转移到指定电话号码上。这种方式在拒接时,也将进行来电转移。
一般的第三方安全软件可能会利用这种方式实现来电拦截功能,即来电时用代码迅速将电话挂断,这时候就会根据设置的转移号码的不同,对方会听到“已停机”、“已关机”、“空号”、“通话中”等语音提示。
-
无应答转移:因为某种原因,没有接听来电,知道一定的等待时间结束,信号中断后,才进行转移。
-
不可及转移(无法接通转移):当手机不在服务区、没有信号、关机时,进行呼叫转移。
Android 的呼叫转移设置
Android系统也同样提供了相应的程序入口进行设置,不同的手机ROM定制不一样,具体入口位置以及设置方式可能会有差异,但总体上都通过如下几种特殊号码格式进行设置的:
转移类型 | 激活 | 取消 | 查询 | 荣耀6移动标准版验证 |
---|---|---|---|---|
无条件转移 | **21*号码# | ##21# | *#21# | 有效 |
遇忙转移 | **67*号码# | ##67# | *#67# | 有效 |
无应答转移 | **61*号码# | ##61# | *#61# | 有效 |
不可及转移 | **62*号码# | ##62# | *#62# | 有效 |
以如下号码为参考,号码格式大致就是这样的:
返回空号的提示音:**67#13800000000#,或者 **67#13444444444#
返回暂时无法接通:**67#13642952697#
返回停机的提示音:**67#13701110216#
返回电话号码有误:**67#13800516309#
返回电话号码关机:**67#13810538911#
但在实际编码过程中,# 号要替换成 %23,不能直接写。
如下设置遇忙返回空号提示:
Uri phoneUri = Uri.parse("tel:**67*13800000000%23");
Intent intent = new Intent(Intent.ACTION_CALL, phoneUri);
/// 6.0开始需要检查权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
Log.e("Shawn", "open: 没有权限");
return;
}
startActivity(intent);
跳转到示例代码
运行效果如下:
点了“开启呼叫转移”后,会有 Toast 提示正在运行代码,随后会弹框提示:
注册成功
点击“查询呼叫转移”后,会提示:
查询成功
进到通话设置里面的呼叫转移设置进行确认。这里遇忙已经设置成功了,不可及是我的手机本身就有的,并不是本次设置的。
确认设置成功
再回到测试App,点击“关闭呼叫转移”,会提示:
删除呼叫转移
再次进入通话设置里的呼叫转移设置进行确认:
确认删除成功
这里因为上面的呼叫转移设置界面不具备实时刷新能力,所以切回来的时候要注意先回退到上一级界面,再重新打开呼叫转移设置。
据说 CDMA 手机有自己的设置方法,如下:(未验证)
转移类型 | 激活方式 | 取消方式 | 查询方式 |
---|---|---|---|
无条件转移 | *72电话号码 | *720 | UNKNOWN |
无应答转移 | *92电话号码 | *920 | UNKNOWN |
遇忙转移 | *90电话号码 | *900 | UNKNOWN |
网友评论