不同网络下紧急拨号的处理

摘要:
问题描述紧急号码在过去的几个项目的开发中一直是难下定论的一项问题,原因在于针对不同CP平台,不同制式的数据网络,不同的运营商,都有不同的紧急号码,而且在无SIM卡情况下紧急号码是否能拨出也并无定论。而其它几个紧急号码并未加入其中,需要自行写入该配置文件,同时modem侧需要为其开通特定的紧急号码拨号通路。这是由于国内并不存在“可以拨打”的紧急号码。

遭遇:

遇到这样一个问题:

使用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

免责声明:文章转载自《不同网络下紧急拨号的处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课小程序02 wxml和wxss下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

如何在jenkins上新建一个项目及其简单配置

单击[新建]进入选择页面,您可以在此页面上配置项目(包括拉取源代码、修改连续构建时间以及在打包和部署之前修改配置文件)3。在General中,您可以设置要构建的版本,如下图5所示。在源代码管理模块中,您可以设置源代码地址(我们公司常用的Git)6。如果是自动构建,您可以将自动构建时间(即构建频率)设置为7。以下是构建中的一些设置。您可以使用shell修改源代...

Wayland 源码解析之代码结构

Wayland实现的代码组成可以分为以下四个部分:1.Wayland库的核心部分,大部分Wayland协议实现都位于该库中。1) 该工具程序分析Wayland协议文件并生成相应的头文件和代码文件。源代码文件列表:wayland/cursor/wayland cursor。通道/光标/通道光标。cwyland/cursor/os兼容性。cwyland/curs...

Spring Boot 核心配置文件 bootstrap & application

boostrap由父ApplicationContext加载,比applicaton优先加载boostrap里面的属性不能被覆盖3、bootstrap/application的应用场景application配置文件这个容易理解,主要用于SpringBoot项目的自动化配置。这个父级的SpringApplicationContext是先加载的,在加载appli...

input框输入金额处理的解决办法

最近,已经启动的项目在删除输入输入量时突然出现问题。各种在线搜索都没有找到你想要的。今天,我将以react框架为例进行代码贡献。我会写下需求和解决方案,希望对我的朋友有用。如果有更好的方法实现它,请给我一些建议!”在“:”下;n=数学。防抱死制动系统;vars=“”;对于{s+=.replace;}S=S||“整数”;n=数学。地板对于{varp=“”;对于...

echarts折线图 鼠标移入改变小点显示样式

=undefined){res+=nameList[i].seriesName+':'+nameList[i].data+'%'+''}}res=res.split;returnres[0]+''+res[1];}}echarts折线图的鼠标移动上去小点显示样式修改tooltip:{trigger:'axis',formatter:function{varr...

.NET5 ABP框架(一)

授权-ABP可以以声明的方式检查权限。如果发生异常,ABP将自动记录并向客户机返回适当的结果。默认情况下,ABP使用Log4Net写入日志。当然,我们也可以通过修改配置来使用其他日志框架。除了本示例中显示的ABP的优点之外,ABP还提供了一个健壮的基础架构和应用程序模型。...