微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 客制化电话断开时的clear code的行为

客制化电话断开时的clear code的行为

时间:10-02 整理:3721RD 点击:
[android Version]
Android V2.3 (GB,GB2,GB3)
Android V4.0, 4.1(ICS,ICS2,JB)
Android V4.2及之后版本(JB2,JB3,JB5,KK1,KK2)
Android V5.0及之后版本(L0,L1)
[DESCRIPTION]
如何进行Clear Code客制化。
[SOLUTION]
Clear code会由CEER这个AT Command上报给RIL,虽然所有的Clear code都会报到
RIL层,但值大于127的Clear code都被映射为UNSPECIFIED了。所以Telephony
php?mod=tag&id=6090" target="_blank" class="relatedlink">Framework这边只能客制化小于127的Clear code。
目前平台上面已经在CallFailCause.java
(alps\frameworks\base\telephony\java\com\android\internal\telephony\GSM)这
个文件中为很多常见的Clear code定义了常量,如仍有需要,可再增加。
以添加Clear code为8的情况为例,步骤如下:
一 GB、ICS、JB版本修改如下:
1、在CallFailCause.Java (
android V4.4之前版本
:alps\frameworks\base\telephony\java\com\android\internal\telephony\gsm
android V4.4及之后版本:
alps\frameworks\opt\telephony\java\com\android\internal\telephony\gsm
)
中添加:
static final int OPERATOR_DETERMINED_BARRING = 8;
2、在Connection.java
(android V4.4之前版本:
alps\frameworks\base\telephony\java\com\android\internal\telephony
android V4.4及之后版本:
alps\frameworks\opt\telephony\java\com\android\internal\telephony)中的
DisconnectCause枚举中添加OPERATOR_DETERMINED_BARRING
3、在(
android V4.4之前版本:
alps\frameworks\base\telephony\java\com\android\internal\telephony\connect
ion.java
android V4.4及之后版本
:alps\frameworks\opt\telephony\java\com\android\internal\telephony\Gsmcon
nection.java)中的disconnectCauseFROMCode(int causeCode)方法中的
swtich(causeCode)中添加
case CallFailCauseOPERATOR_DETERMINED_BARRING:
return DisconnectCause.OPERATOR_DETERMINED_BARRING;
4、
android V4.4之前版本:
在InCallScreen中的onDisconnect(AsyncResult r , int msg)方法中添加UI收到信
息后的行为,例如显示一个Toast:
} else if (cause ==
Connection.DisconnectCause.OPERATOR_DETERMINED_BARRING) {
showToast(String string)); //此处也可以修改为其他行为
return;
android V4.4及之后版本:
在incallActivity中的getResIdDisconnectionCause(Call.DisconnectionCause
cause)方法中添加UI收到信息后的行为即可。
二 KK版本修改如下:
1、在CallFailCause.java
(alps\frameworks\opt\telephony\src\java\com\android\internal\telephony\gsm)中添加
static final int OPERATOR_DETERMINED_BARRING = 8;//自定义名称
2、在Call.java
(alps\packages\services\telephony\common\src\com\android\services\telephony\common) 中
的DisconnectCause枚举中添加OPERATOR_DETERMINED_BARRING
3、在Connection.java
(alps\frameworks\opt\telephony\src\java\com\android\internal\telephony)中的
DisconnectCause枚举中添加OPERATOR_DETERMINED_BARRING
4、在GsmConnection.java
(alps\frameworks\base\telephony\java\com\android\internal\telephony\gsm)中的
disconnectCauseFromCode(int causeCode)方法中的swtich(causeCode)中添加
case CallFailCause.OPERATOR_DETERMINED_BARRING:
return DisconnectCause.OPERATOR_DETERMINED_BARRING;
5、在CallModeler.java(alps\packages\services\telephone\src\com\android\phone)中的成员变
量CAUSE_MAP中增加:
.put(Connection.DisconnectCause. OPERATOR_DETERMINED_BARRING,
Call.DisconnectCause. OPERATOR_DETERMINED_BARRING)
6、在InCallActivity.java中的getResIdForDisconnectCause() 增加:
else if (cause == Call.DisconnectCause. OPERATOR_DETERMINED_BARRING) {
resId = R.string.XXX;//客制化添加要显示的String
}
三 L版本修改如下:
1、在CallFailCause.java
(alps\frameworks\opt\telephony\src\java\com\android\internal\telephony\gsm)中添加静态成
员变量:static final int OPERATOR_DETERMINED_BARRING = 8;//自定义名称
2、在DisconnectCause.java (alps\frameworks\base\telephony\java\android\telephony)中添加
静态成员变量:static final int OPERATOR_DETERMINED_BARRING,并在其复写的toString()中添
加相应的Case分支。
3、在GsmConnection.java
(alps\frameworks\opt\telephony\src\java\com\android\internal\telephony\gsm)中的
disconnectCauseFromCode(int causeCode)方法中的swtich(causeCode)中添加:
case CallFailCause.OPERATOR_DETERMINED_BARRING:
return DisconnectCause.OPERATOR_DETERMINED_BARRING;
4、在DisconnectCauseUtil.java
(alps\packages\services\telephony\src\com\android\services\telephony)中的
toTelecomDisconnectCause()函数中会调用其内部如下函数:
toTelecomDisconnectCauseCode(),// # cause code归类,与第五步的判断对应
toTelecomDisconnectCauseLabel(),
toTelecomDisconnectCauseDescription(),//# 展示给用户的断开描述
toTelecomDisconnectReason(),
toTelecomDisconnectCauseTone()
请根据需要在上述函数中加入(#项为必须添加)
case CallFailCause.OPERATOR_DETERMINED_BARRING://分支
5、在InCallActivity.java (alps\packages\apps\incallui\src\com\android\incallui)中的
maybeShowErrorDialogOnDisconnect()函数中会根据Code值以及断开Description等来决定是否显示
对话框提示,代码如下:


另外,关于Clear code的具体含义,可以去3GPP Spec TS24.008的Annex H中去查找

附加说明:
对于Clear Code从RILD上报到RILJ是否对其值有修改可以通过查看Radio Log来确定:
03-02 20:41:57.311 641 644 D use-Rlog/RLOG-RIL: MD fail cause = 8
03-02 20:41:57.311 641 644 D use-Rlog/RLOG-RIL: RIL fail cause = 21
如果MD和RIL的值不一致,例如值为8,请修改ril_cc.c文件(alps/mediatek/hardware/ril/mtkril/
ril_cc.c)中的函数requestLastCallFailCause():
if (callFailCause == 10 || callFailCause == 8)修改为:if (callFailCause == 10)。

学习了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top