zoukankan      html  css  js  c++  java
  • 不同网络下紧急拨号的处理

    遭遇:

      遇到这样一个问题:

        使用GSM卡,拨打112时提示各种紧急号码作用……

        使用CMDA卡,拨打112时提示拨打的号码是空号??

    这让我有点不知所以然,网上找到下面这篇文章,说的很详细,转载了。

     

    问题描述

      紧急号码在过去的几个项目的开发中一直是难下定论的一项问题,原因在于针对不同CP平台,不同制式的数据网络,不同的运营商,都有不同的紧急号码,

    而且在无SIM卡情况下紧急号码是否能拨出也并无定论。

    常用的紧急号码中:

      911是北美大陆通用报警电话。

      08和112是全世界GSM通信网络共同的标准紧急电话

      110,119,120,122是国内大陆的匪、火、急救、交通紧急号码

      118是欧洲部分地区的报警求救电话

      999是红十字会的报警电话

      000是港澳地区的报警电话

    印度紧急号码支持:

      100 police

      112,108 medical

      101 file

      其中,112与911作为默认的紧急号码,是被写入ril.rcclist中。而其它几个紧急号码并未加入其中,需要自行写入该配置文件,

    同时modem侧需要为其开通特定的紧急号码拨号通路。

     

    关于需求给出的手机紧急号码的最终需求定义如下(高通平台):

    关于“紧急呼叫”问题,总结下,仅限高通平台:

    1. CDMA网络

    (1)无卡情况下
        119/999/120/110均被直接拒绝,无法完成呼叫;

        特例:拨打112/911,视各地网络不同而不同,
              有的地方cdma网络会不支持,但高通的DSDS方案,会自动切换到GSM网络下完成112呼叫(如:北京);
              有的地方的CDMA网络可以完成呼叫(如:厦门);

    (2)插卡情况下
        119/999/120/110/119,均按照普通电话呼叫成功,包括欠费情况下仍然能呼叫成功;

        112 会拨到联通112障碍台

        911 提示为空号

    2. wcdma网络+GSM网络

    (1)无卡情况下
        999/120/110/119,均被拒绝

        112/911会转到障碍台;

    (2)插卡情况下
         999/120/110/119,按照正常电话呼叫成功,包括欠费情况下仍然能拨打成功

         112/911,会转到障碍台;

     

    关于紧急号码(补1)

      国内的紧急号码在不插sim卡的情况下,实际上都无法打到人工台。这是由于国内并不存在“可以拨打”的紧急号码。

    通常意义上的紧急号码应该独立于运营商存在,也就是不依赖于SIM卡。但是这种情况在国内是显然不行的,即使在modem侧进行处理,让110、119这类的号码走紧急通话的信道,仍然只能打到障碍台。

    至于为什么平时拨打紧急号码可以成功,这是因为插着sim卡的时候,并不是走紧急拨号的信道,只是一路普通的呼出电话而已。

    解决办法

      在处理该问题的过程中,往往rcclist列表都无法直接修改,而且,framework侧并不是最终决定该紧急号码是否能够拨出去的决定因素(如果该紧急号码并未加入modem平台侧紧急号码的列表中,该号码依然无法拨出),所

    以解决该问题一劳永逸的方法是,在framework侧直接将需求所定下来的紧急号码写为固定的紧急号码,不做过滤处理,都交由Modem侧来判决。

    目前项目对紧急号码的支持为:

    (高通,G/W)
    预置的紧急号码包括:110、112、911、000、08、999、118、119。

    (英飞凌,G/EVDO)

    预置的紧急号码包括:110、112、911、999、119、120。

    暂时的解决办法可以是:

    可以在 android/telephony/PhoneNumberUtils.java 中进行修改:

     private static boolean isEmergencyNumberInternal(String number, boolean useExactMatch) {
     // If the number passed in is null, just return false:
     if (number == null) return false;
     
     // If the number passed in is a SIP address, return false, since the
     // concept of "emergency numbers" is only meaningful for calls placed
     // over the cell network.
     // (Be sure to do this check *before* calling extractNetworkPortionAlt(),
     // since the whole point of extractNetworkPortionAlt() is to filter out
     // any non-dialable characters (which would turn 'abc911def@example.com'
     // into '911', for example.))
     if (isUriNumber(number)) {
     return false;
     }
     
     // Strip the separators from the number before comparing it
     // to the list.
     number = extractNetworkPortionAlt(number);
     /*
     // retrieve the list of emergency numbers
     // check read-write ecclist property first
     String numbers = SystemProperties.get("ril.ecclist");
     if (TextUtils.isEmpty(numbers)) {
     // then read-only ecclist property since old RIL only uses this
     numbers = SystemProperties.get("ro.ril.ecclist");
     }
     
     if (!TextUtils.isEmpty(numbers)) {
     // searches through the comma-separated list for a match,
     // return true if one is found.
     for (String emergencyNum : numbers.split(",")) {
     if (useExactMatch) {
     if (number.equals(emergencyNum)) {
     return true;
     }
     } else {
     if (number.startsWith(emergencyNum)) {
     return true;
     }
     }
     }
     // no matches found against the list!
     return false;
     }
     */
     // No ecclist system property, so use our own list.
     if (useExactMatch) {
     
     return (number.equals("112") || 
     number.equals("08") ||
     //北美大陆通用报警
     number.equals("911") || 
     //国内大陆紧急号码
     number.equals("110") ||
     number.equals("119") ||
     number.equals("120") ||
     number.equals("122") ||
     //港澳地区报警
     number.equals("000") ||
     //印度地区专用
     number.equals("100") ||
     number.equals("108") ||
     number.equals("101") ||
     //红十字会
     number.equals("999") || 
     //欧洲部分地区报警
     number.equals("118")); 
     } else {
     return (number.startsWith("112") || 
     number.startsWith("08") || 
     //北美大陆通用报警
     number.startsWith("911") ||
     //国内大陆紧急号码
     number.startsWith("110") || 
     number.startsWith("119") || 
     number.startsWith("120") || 
     number.startsWith("122") || 
     //港澳地区报警
     number.startsWith("000") || 
     //印度地区专用
     number.startsWith("100") || 
     number.startsWith("108") || 
     number.startsWith("101") || 
     //红十字会
     number.startsWith("999") ||
     //欧洲部分地区报警
     number.startsWith("118")); //changed by weiyi
     }
     }

    注释掉对应的过滤段,添加结果即可。

    转载:http://blog.csdn.net/guiyu_1985/article/details/8454413

  • 相关阅读:
    Flask上下文管理源码分析 ——(3)
    Flask 快速使用 进阶—— (2)
    HTML-语法
    安装kubenetes-遇到的问题总结
    CentOS7-部署kubernetes
    k8s-部署及介绍
    docker-macvlan网络
    Dom编程-左侧菜单栏设计模型实现
    JavaScript-checkbox标签-隐藏、显示、全选、取消和反选等操作
    docker-Overlay原生网络
  • 原文地址:https://www.cnblogs.com/bastard/p/2922460.html
Copyright © 2011-2022 走看看