android預(yù)置默認的語音信箱號碼具體實現(xiàn)
1、支持以XML的方式預(yù)置VM number,文件名為:voicemail-conf.xml
文件的內(nèi)容格式為
<?xml version='1.0' encoding='utf-8'?>
<voicemail>
<voicemail numeric="46000" carrier="CMCC" vmnumber="10086" vmtag="CMCC voicemail" />
</voicemail>
2、關(guān)于文件的位置
文件在手機中的位置:system/etc
文件在工程中的位置(GB, GB2): vendor\mediatek\etc
文件在工程中的位置(ICS及以后): mediatek\source\frameworks\telephony\etc
對于GB、GB2的版本,還需要在在build\target\product\xxx.mk (xxx為工程名)中,添加語句PRODUCT_COPY_FILES += vendor/mediatek/etc/voicemail-conf.xml:system/etc/voicemail-conf.xml
對于ICS及ICS2的版本,還需要在build\target\product\common.mk中,添加語句PRODUCT_COPY_FILES += mediate/source/frameworks/telephony/etc/voicemail-conf.xml:system/etc/voicemail-conf.xml
對于JB及JB2以后的版本,還需要在build\target\product\common.mk中,添加語句PRODUCT_COPY_FILES += mediate/frameworks/base/telephony/etc/voicemail-conf.xml:system/etc/voicemail-conf.xml
3、使SIM卡中的VM number優(yōu)先于預(yù)置號碼的方法
將SIMRecords.java (frameworks\base\telephony\java\com\android\internal\telephony\gsm)中的函數(shù)private setVoiceMailByCountry(String spn)中的語句if (mVmConfig.containsCarrier(spn))修改為
if (TextUtils.isEmpty(voiceMailTag) && TextUtils.isEmpty(voiceMailNum) && mVmConfig.containsCarrier(spn))
4、在使用了voicemail-conf.xml來預(yù)置VM number后,使終端用戶可以修改VM number的方法
1) 在SIMRecords.java中添加語句import android.text.TextUtils;
2) 在SIMRecords.java中添加一個成員變量boolean isSetByCountry = false;
3) 將SIMRecords.java中的函數(shù)private setVoiceMailByCountry(String spn)修改為
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);
}
4) 在GSMPhone.java (frameworks\base\telephony\java\com\android\internal\telephony\gsm)中的函數(shù)handleMessage中的語句case EVENT_SIM_RECORDS_LOADED:中將語句 if (imsi != null && imsiFromSIM != null && !imsiFromSIM.equals(imsi))
{
…
}
修改為
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
// 當(dāng)相應(yīng)卡槽更換SIM卡后,是否清除用戶對之前SIM卡的VM number設(shè)置
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中的函數(shù)private void storeVoiceMailNumber(String number)中的語句editor.putString(VM_NUMBER+mySimId, number);修改為editor.putString(getSubscriberId(), number); //不再使用卡槽作為保存VM number的單位,而使用IMSI
6) 將GSMPhone.java中的函數(shù)public String getVoiceMailNumber()中的語句if (TextUtils.isEmpty(number))修改為 if (TextUtils.isEmpty(number) || ((SIMRecords)mIccRecords).isSetByCountry) //如果SIM卡中
//無VM number或是通過voicemail-conf.xml來設(shè)置的,則應(yīng)該讀取一下Preference,看是否用戶
//對此SIM卡設(shè)置過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;
}
相關(guān)文章
android仿360加速球?qū)崿F(xiàn)內(nèi)存釋放
本篇文章實現(xiàn)了Android仿360加速球?qū)崿F(xiàn)內(nèi)存釋放,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10Android 應(yīng)用Crash 后自動重啟的方法小結(jié)
這篇文章主要介紹了Android 應(yīng)用Crash 后自動重啟的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Android高德地圖poi檢索仿微信發(fā)送位置實例代碼
本篇文章主要介紹了Android高德地圖poi檢索仿微信發(fā)送位置實例代碼,具有一定的參考價值,有興趣的可以了解一下。2017-04-04Android開發(fā)實現(xiàn)自定義Toast、LayoutInflater使用其他布局示例
這篇文章主要介紹了Android開發(fā)實現(xiàn)自定義Toast、LayoutInflater使用其他布局,涉及Android自定義Toast與界面布局相關(guān)操作技巧,需要的朋友可以參考下2019-03-03android開發(fā)中常用的Eclipse快捷鍵詳細整理
android開發(fā)中常用的Eclipse快捷鍵詳細整理方便查找,需要的朋友可以了解下2012-12-12Android UI設(shè)計與開發(fā)之PopupWindow仿騰訊新聞底部彈出菜單
這篇文章主要為大家詳細介紹了Android UI設(shè)計與開發(fā)之PopupWindow仿騰訊新聞底部彈出菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Android中系統(tǒng)自帶鎖WalkLock與KeyguardLock用法實例詳解
這篇文章主要介紹了Android中系統(tǒng)自帶鎖WalkLock與KeyguardLock用法,結(jié)合實例形式較為詳細的分析了WalkLock與KeyguardLock的功能、作用、使用方法與相關(guān)注意事項,需要的朋友可以參考下2016-01-01Android關(guān)于Glide的使用(高斯模糊、加載監(jiān)聽、圓角圖片)
這篇文章主要為大家詳細介紹了Android關(guān)于Glide的使用,內(nèi)容豐富,高斯模糊、加載監(jiān)聽、圓角圖片希望大家可以掌握,感興趣的小伙伴們可以參考一下2016-11-11