微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 预置默认的语音信箱号码

预置默认的语音信箱号码

时间:10-02 整理:3721RD 点击:
[androidVersion]
GB, GB2(android v2.x)
ICS, ICS2, JB(android v4.x)
AndroidV4.2(JB2,JB3,JB5)
AndroidV5.0,V5.1 (L0、L1)
[DESCRIPTION]
有些SIM卡在出厂时并没有预置VoiceMail number,但运营商又要求能够根据PLMN去自适应的从手机中读取到预设的VMnumber。在此介绍以xml的方式预置VM number的方法,以及如何允许用户去修改并能够记住用户的选择。
VM number使用的优先级为: SIM卡读取>用户设置>xml预置。在用户修改voice mail number时,优先存储到SIM卡。若SIM卡存储失败,则以IMSI为单位存储到手机中。
[SOLUTION]
1、支持以XML的方式预置VM number,文件名为:voicemail-conf.xml
文件的内容格式为
<?xml version='1.0' encoding='utf-8'?>
<voicemail>
<voicemail numeric="46000" carrier="CMCC" vmnumber="10086" vmtag="CMCC
voicemail" />
</voicemail>
注:
如果没有语音信箱号码预置功能,“voicemail-conf.xml”文件可有可无,否则必须
有。
2、关于文件的位置
文件在手机中的位置:system/etc
文件在工程中的位置(GB, GB2): vendor\mediatek\etc
文件在工程中的位置(GB3): mediate\php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\telephony\etc
文件在工程中的位置(ICS及ICS2):mediatek\source\frameworks\telephony\etc
文件在工程中的位置(JB及JB之后的版本):
mediate\frameworks\base\telephony\etc
文件在工程中的位置(L0及L1版本):
alps\vendor\mediatek\proprietary\framewroks\base\telephony\etc
对于GB、GB2的版本,在build\target\product\xxx.mk (xxx为工程名)中,添加语句
PRODUCT_COPY_FILES += vendor/mediatek/etc/voicemailconf.
xml:system/etc/voicemail-conf.xml
对于GB3的版本,在build\target\product\xxx.mk (xxx为工程名)中,添加语句
PRODUCT_COPY_FILES += mediate/frameworks/telephony/etc/voicemailconf.
xml:system/etc/voicemail-conf.xml
对于ICS及ICS2的版本,还需要在build\target\product\common.mk中,添加语句
PRODUCT_COPY_FILES += mediate/source/frameworks/telephony/etc/voicemailconf.
xml:system/etc/voicemail-conf.xml
对于JB及JB2以后的版本,还需要在build\target\product\common.mk中,添加语句
PRODUCT_COPY_FILES += mediate/frameworks/base/telephony/etc/voicemailconf.
xml:system/etc/voicemail-conf.xml
对于L0及L1版本,还需要alps/device/mediatek/对应的平台(如
:mt6735)/device.mk中的SPN配置处增加一项voicemail配置即
:PRODUCT_COPY_FILES +=
vendor/mediatek/proprietary/frameworks/base/telephony/etc/spnconf.
xml:system/etc/spn-conf.xml 后面添加语句PRODUCT_COPY_FILES +=
vendor/mediatek/proprietary/frameworks/base/telephony/etc/voicemailconf.
xml:system/etc/voicemail-conf.xml
3、使SIM卡中的VM number优先于预置号码的方法
将SIMRecords.java的函数private setVoiceMailByCountry(String spn)中的语句:
if (mVmConfig.containsCarrier(spn))修改为:
android V4.4之前版本:
if (TextUtils.isEmpty(voiceMailTag) && TextUtils.isEmpty(voiceMailNum) &&
mVmConfig.containsCarrier(spn))
android V4.4及之后的版本:
if (TextUtils.isEmpty(mVoiceMailTag) && TextUtils.isEmpty(mVoiceMailNum) &&
mVmConfig.containsCarrier(spn))
4、在使用了voicemail-conf.xml来预置VM number后,使终端用户可以修改VM
number的方法
1)在SIMRecords.java中添加语句import android.text.TextUtils;
2)在SIMRecords.java中添加一个成员变量boolean isSetByCountry = false;
3)将SIMRecords.java中的函数private setVoiceMailByCountry(String spn)修改为
android V4.4之前版本:
private void setVoiceMailByCountry(String spn) {
if (TextUtils.isEmpty(voiceMailTag) && TextUtils.isEmpty(voiceMailNum) &&
mVmConfig.containsCarrier(spn))
{
// isVoiceMailFixed = true; //注释掉此语句以让用户能够修改
isSetByCountry = true; //让GSMPhone知道这是从xml中读取的
voiceMailNum = mVmConfig.getVoiceMailNumber(spn);
voiceMailTag = mVmConfig.getVoiceMailTag(spn);
}
android V4.4及之后的版本:
private void setVoiceMailByCountry(String spn) {
if (TextUtils.isEmpty(mVoiceMailTag) && TextUtils.isEmpty(mVoiceMailNum) &&
mVmConfig.containsCarrier(spn))
{
// mIsVoiceMailFixed = true; //注释掉此语句以让用户能够修改
isSetByCountry = true; //让GsmPhone知道这是从xml中读取的
mVoiceMailNum = mVmConfig.getVoiceMailNumber(spn);
mVoiceMailTag = mVmConfig.getVoiceMailTag(spn);
}
4)在GSMPhone.java文件中,将方法handleMessage中的如下语句:
case EVENT_SIM_RECORDS_LOADED:在此语句中,
将语句
if (imsi != null && imsiFROMSIM != null && !imsiFromSIM.equals(imsi)){

}
修改为
SharedPreferences sp =
PreferenceManager.getDefaultSharedPreferences(getContext());
// 当相应卡槽更换SIM卡后,是否清除用户对之前SIM卡的VM number设置
boolean clear_if_change_sim = sp.getBoolean(“clear_if_change”, false);
if (clear_if_change_sim && imsi != null && imsiFromSIM != null &&
!imsiFromSIM.equals(imsi)){
//storeVoiceMailNumber(null);
Log.d(LOG_TAT, “reset vm number because sim changed”);
SharedPreferences.Editor editor = sp.edit();
editor.remove(getVmSimImsi());
editor.apply();
setVmSimImsi(null);
}
5)将GSMPhone.java中的方法:private void storeVoiceMailNumber(String number)中的
语句editor.putString(VM_NUMBER+mySimId, number);修改为
editor.putString(getSubscriberId(), number); //不再使用卡槽作为保存VM number的单
位,而使用IMSI
6)将GSMPhone.java中的方法:public String getVoiceMailNumber()中的语句
if (TextUtils.isEmpty(number))
修改为 if (TextUtils.isEmpty(number) ||
((SIMRecords)MICcRecords.get())).isSetByCountry)
//如果SIM卡中无VM number或是通过voicemail-conf.xml来设置的,则应该读取一下
Preference,看是否用
//户对此SIM卡设置过VM number。
并且将语句number = sp.getString(VM_NUMBER+mySimId, null);
修改为
Log.d(LOG_TAG, vm num from simRecords, num= “+number+” is from factory= “+
((SIMRecords)mIccRecords).isSetbyCountry);
String temp = sp.getString(getSubscriberId(), null);
if (temp != null)
{
Log.d(LOG_TAG, “replace vm num with user defined, num= “+temp);
number = temp;
}

;P:loveliness:

来看看:loveliness:

点赞,棒棒哒

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

网站地图

Top