紧急号码的管理及客制化方法
时间:10-02
整理:3721RD
点击:
[android Version]
Android V2.3 (GB, GB2,GB3)
Android V4.0 (ICS, ICS2)
Android V4.1/V4.2 (JB, JB2,JB3,JB5)
[DESCRIPTION]
紧急号码的客制化分为AP(android)端和Modem端两部分。以下是Smartphohe平台上拨号的一个逻辑流程.
[SOLUTION]
根据上述拨号逻辑流程,可知:
【Ⅰ】如果一个紧急号码要求不管在什么情况下,都以“紧急方式呼出”,则可采取如下两种修改方法:
a.只修改AP部分,即:AP端采取“紧急式呼叫”便可。
b.修改AP和Modem两部分。AP端采用“非紧急式呼叫”进行客制化,而Modem端的客制化请参考如下Modem部分的修改。
【Ⅱ】如果一个紧急号码要求在手机有卡时,以“普通方式呼出”,在无卡时,以“紧急方式呼出”,则可采取如下修改方法:
a. 修改AP和Modem两部分。AP端采用“非紧急式呼叫”进行客制化,而Modem端的客制化请参考如下Modem部分的修改。
※ 以下以添加“102”紧急号码为例(GB, GB2, ICS, ICS2版本可直接参考如下修改,而JB及以上版本,还要同时留意该文档中
“注意事项”部分的修改说明):
A.修改AP部分:
说明:
AP端是否采用“紧急式呼叫”,它的判断条件是定义在如下方法中:
Connection dial(String dialString, ...)方法是定义在php?mod=tag&id=6090" target="_blank" class="relatedlink">Framework\base\telephony
\java\com\android\internal\telephony\GSM\GsmCallTracker.java文件中。
从上述代码逻辑,可知:
★ AP端采用“紧急式呼叫”,其修改方法如下(红框标识的地方):
a.修改framework\base\telephony\java\android\telephony\
PhoneNumberUtils.java中的isEmergencyNumber(...)方法,使其返回为true。
Public static boolean isEmergencyNumber(String num)
{
......
......
b. 修改framework\base\telephony\java\android\telephony\
PhoneNumberUtils.java中的isSpecialEmergencyNumber (...)方法,使其返回为false.
注:以上方法中并没判断“102”号码,已满足返回值为false的条件,暂不用修改。
★ AP端采用“非紧急式呼叫”,其修改方法如下(红框标识的地方):
a.修改framework\base\telephony\java\android\telephony\
PhoneNumberUtils.java中的isEmergencyNumber(...)方法,使其返回为true。
Public static boolean isEmergencyNumber(String num)
{
......
......
b. 修改framework\base\telephony\java\android\telephony\
PhoneNumberUtils.java中的isSpecialEmergencyNumber (...)方法,使其返回为true.
B.修改Modem部分:
如果AP端是采用“紧急式呼叫”,则Modem部分不用修改;如果AP端是采用“非紧急式呼叫”,则必须修改Modem部分。
1.如果AP端是采用“非紧急式呼叫”,则Modem部分的修改如下(红框标识的地方):
a.修改custom\common\custom_ecc.c文件中的数组ecc_default_num。
注:
前四个uint16是号码,以0x0000结尾,第5个uint16是参数,“1”表示此号码始终以紧急方式呼出;“0”表示此号码
在手机有卡时,以普通方式呼出,无卡时,以紧急方式呼出。
※ 注意事项
1.客制化紧急拨号功能时,注意不同软件版本的区别:
A.对于GB, GB2, ICS, ICS2这四个版本,请直接参考上述修改方法.
B.对于GB3,JB,JB3及以上版本,由于在phoneNumberUtils.java文件中,对isSpecialEmergencyNumber(..)和isEmergencyNumber(…
)方法定义有所改变,如下(红色框标识差异的地方):
……
……
}
针对以上不同点,在客制化紧急号码时,请采取如下方式去修改以上两方法的不同点:
(1)先查看mediatek\operator\Opxxx(OP01、OP02、。)\frameworks\java\com
\mediatek\op\telephony目录下是否有PhoneNumberExtOPxxx.java文件,如有,就直接修改此文件就行,否则就修改
mdiatek\frameworks\base\op\java\com\mediatek\op\telephony目录下的PhoneNumberExt.java文件。
(2)针对PhoneNumberExtOPxx.java文件或PhoneNumberExt.java文件,如有如下方法,请按下述方式修
改(红色框标识修改的地方):
注:
在以上方法中客制化需要设定为紧急号码的号码。此方法用于判断某个号码是否需要设定为紧急号码,作用同JB之前版本的
PhoneNumberUtils.isEmergencyNumber(…)方法中的emergencyNumberList数组.
注:
此方法含义同JB之前版本的PhoneNumberUtils.java中的isSpecialEmergencyNumber方法。
※ 附加更新(KK2、L版本说明)
KK2、 L版本紧急号码Customer的部分改成了在XML文件中来配置,文件的路径:
KK2:alps\mediatek\external\EcCLIst
L :alps\vendor\mediatek\proprietary\external\EccList。
EccList文件夹中会包含ecc_list.xml,以及与运营商有关的ecc_list_OP01.xml、
ecc_list_OPXX.xml等对应文件,此外还包括一个EccList.mk的Makefile。实际运行中会根据
Makefile文件中的定义匹配对应的XML文件作为判断是否是紧急号码的来源。
下面是ecc_list.xml文件中的内容:
*说明:
一 、添加号码请注意Condition的配置,根据需求来选择对应的值。
0:表示在无卡的时候当紧急号码;
1:表示始终当紧急号码;
2:表示界面上显示成紧急拨号,但实际以普通方式拨出。
二 、Category属性的设置于语音台选择有关,只有在实际拨打紧急号码的时候会将此号码配置的Category属性发送到Modem。国内默认都是‘0’,国外根据实际情况选择。
Android V2.3 (GB, GB2,GB3)
Android V4.0 (ICS, ICS2)
Android V4.1/V4.2 (JB, JB2,JB3,JB5)
[DESCRIPTION]
紧急号码的客制化分为AP(android)端和Modem端两部分。以下是Smartphohe平台上拨号的一个逻辑流程.
[SOLUTION]
根据上述拨号逻辑流程,可知:
【Ⅰ】如果一个紧急号码要求不管在什么情况下,都以“紧急方式呼出”,则可采取如下两种修改方法:
a.只修改AP部分,即:AP端采取“紧急式呼叫”便可。
b.修改AP和Modem两部分。AP端采用“非紧急式呼叫”进行客制化,而Modem端的客制化请参考如下Modem部分的修改。
【Ⅱ】如果一个紧急号码要求在手机有卡时,以“普通方式呼出”,在无卡时,以“紧急方式呼出”,则可采取如下修改方法:
a. 修改AP和Modem两部分。AP端采用“非紧急式呼叫”进行客制化,而Modem端的客制化请参考如下Modem部分的修改。
※ 以下以添加“102”紧急号码为例(GB, GB2, ICS, ICS2版本可直接参考如下修改,而JB及以上版本,还要同时留意该文档中
“注意事项”部分的修改说明):
A.修改AP部分:
说明:
AP端是否采用“紧急式呼叫”,它的判断条件是定义在如下方法中:
Connection dial(String dialString, ...)方法是定义在php?mod=tag&id=6090" target="_blank" class="relatedlink">Framework\base\telephony
\java\com\android\internal\telephony\GSM\GsmCallTracker.java文件中。
从上述代码逻辑,可知:
★ AP端采用“紧急式呼叫”,其修改方法如下(红框标识的地方):
a.修改framework\base\telephony\java\android\telephony\
PhoneNumberUtils.java中的isEmergencyNumber(...)方法,使其返回为true。
Public static boolean isEmergencyNumber(String num)
{
......
......
b. 修改framework\base\telephony\java\android\telephony\
PhoneNumberUtils.java中的isSpecialEmergencyNumber (...)方法,使其返回为false.
注:以上方法中并没判断“102”号码,已满足返回值为false的条件,暂不用修改。
★ AP端采用“非紧急式呼叫”,其修改方法如下(红框标识的地方):
a.修改framework\base\telephony\java\android\telephony\
PhoneNumberUtils.java中的isEmergencyNumber(...)方法,使其返回为true。
Public static boolean isEmergencyNumber(String num)
{
......
......
b. 修改framework\base\telephony\java\android\telephony\
PhoneNumberUtils.java中的isSpecialEmergencyNumber (...)方法,使其返回为true.
B.修改Modem部分:
如果AP端是采用“紧急式呼叫”,则Modem部分不用修改;如果AP端是采用“非紧急式呼叫”,则必须修改Modem部分。
1.如果AP端是采用“非紧急式呼叫”,则Modem部分的修改如下(红框标识的地方):
a.修改custom\common\custom_ecc.c文件中的数组ecc_default_num。
注:
前四个uint16是号码,以0x0000结尾,第5个uint16是参数,“1”表示此号码始终以紧急方式呼出;“0”表示此号码
在手机有卡时,以普通方式呼出,无卡时,以紧急方式呼出。
※ 注意事项
1.客制化紧急拨号功能时,注意不同软件版本的区别:
A.对于GB, GB2, ICS, ICS2这四个版本,请直接参考上述修改方法.
B.对于GB3,JB,JB3及以上版本,由于在phoneNumberUtils.java文件中,对isSpecialEmergencyNumber(..)和isEmergencyNumber(…
)方法定义有所改变,如下(红色框标识差异的地方):
……
……
}
针对以上不同点,在客制化紧急号码时,请采取如下方式去修改以上两方法的不同点:
(1)先查看mediatek\operator\Opxxx(OP01、OP02、。)\frameworks\java\com
\mediatek\op\telephony目录下是否有PhoneNumberExtOPxxx.java文件,如有,就直接修改此文件就行,否则就修改
mdiatek\frameworks\base\op\java\com\mediatek\op\telephony目录下的PhoneNumberExt.java文件。
(2)针对PhoneNumberExtOPxx.java文件或PhoneNumberExt.java文件,如有如下方法,请按下述方式修
改(红色框标识修改的地方):
注:
在以上方法中客制化需要设定为紧急号码的号码。此方法用于判断某个号码是否需要设定为紧急号码,作用同JB之前版本的
PhoneNumberUtils.isEmergencyNumber(…)方法中的emergencyNumberList数组.
注:
此方法含义同JB之前版本的PhoneNumberUtils.java中的isSpecialEmergencyNumber方法。
※ 附加更新(KK2、L版本说明)
KK2、 L版本紧急号码Customer的部分改成了在XML文件中来配置,文件的路径:
KK2:alps\mediatek\external\EcCLIst
L :alps\vendor\mediatek\proprietary\external\EccList。
EccList文件夹中会包含ecc_list.xml,以及与运营商有关的ecc_list_OP01.xml、
ecc_list_OPXX.xml等对应文件,此外还包括一个EccList.mk的Makefile。实际运行中会根据
Makefile文件中的定义匹配对应的XML文件作为判断是否是紧急号码的来源。
下面是ecc_list.xml文件中的内容:
*说明:
一 、添加号码请注意Condition的配置,根据需求来选择对应的值。
0:表示在无卡的时候当紧急号码;
1:表示始终当紧急号码;
2:表示界面上显示成紧急拨号,但实际以普通方式拨出。
二 、Category属性的设置于语音台选择有关,只有在实际拨打紧急号码的时候会将此号码配置的Category属性发送到Modem。国内默认都是‘0’,国外根据实际情况选择。