美文网首页
[Android][M0][Call] 呼叫转移

[Android][M0][Call] 呼叫转移

作者: 灰灰手记 | 来源:发表于2017-05-04 21:33 被阅读716次

    呼叫转移场景

    呼叫转移一般有以下几种场景:

    1. 无条件转移(始终转移):不管手机当前处于何种状态,来电都会被转移到指定的电话号码上,自己的手机将不会有任何反应。

    2. 遇忙转移(占线转移):在自己的手机正处于通话状态时,来电将会被转移到指定电话号码上。这种方式在拒接时,也将进行来电转移。

    一般的第三方安全软件可能会利用这种方式实现来电拦截功能,即来电时用代码迅速将电话挂断,这时候就会根据设置的转移号码的不同,对方会听到“已停机”、“已关机”、“空号”、“通话中”等语音提示。

    1. 无应答转移:因为某种原因,没有接听来电,知道一定的等待时间结束,信号中断后,才进行转移。

    2. 不可及转移(无法接通转移):当手机不在服务区、没有信号、关机时,进行呼叫转移。


    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);
    

    跳转到示例代码
    运行效果如下:

    荣耀6移动标准版 测试App界面

    点了“开启呼叫转移”后,会有 Toast 提示正在运行代码,随后会弹框提示:


    注册成功

    点击“查询呼叫转移”后,会提示:


    查询成功

    进到通话设置里面的呼叫转移设置进行确认。这里遇忙已经设置成功了,不可及是我的手机本身就有的,并不是本次设置的。


    确认设置成功

    再回到测试App,点击“关闭呼叫转移”,会提示:


    删除呼叫转移

    再次进入通话设置里的呼叫转移设置进行确认:


    确认删除成功

    这里因为上面的呼叫转移设置界面不具备实时刷新能力,所以切回来的时候要注意先回退到上一级界面,再重新打开呼叫转移设置。


    据说 CDMA 手机有自己的设置方法,如下:(未验证)
    转移类型 激活方式 取消方式 查询方式
    无条件转移 *72电话号码 *720 UNKNOWN
    无应答转移 *92电话号码 *920 UNKNOWN
    遇忙转移 *90电话号码 *900 UNKNOWN

    相关文章

      网友评论

          本文标题:[Android][M0][Call] 呼叫转移

          本文链接:https://www.haomeiwen.com/subject/wiiltxtx.html