Android 預置預設的語音信箱號碼

來源:互聯網
上載者:User

前言
歡迎大家我分享和推薦好用的程式碼片段~~
聲明
歡迎轉載,但請保留文章原始出處:
CSDN:
http://www.csdn.net
雨季o莫憂離:http://blog.csdn.net/luckkof

本文

有些SIM卡在出廠時並沒有預置VoiceMail number,但電訊廠商又要求能夠根據PLMN去自適應的從手機中讀取到預設的VM number。在此介紹以xml的方式預置VM number的方法,以及如何允許使用者去修改並能夠記住使用者的選擇。VM number使用的優先順序為: SIM卡讀取>使用者佈建>xml預置。在使用者修改voice mail number時,優先儲存到SIM卡。若SIM卡儲存失敗,則以IMSI為單位儲存到手機中。

1、支援以XML的方式預置VM number,檔案名稱為:voicemail-conf.xml

檔案的內容格式為

註:

如果沒有語音信箱號碼預置功能,“voicemail-conf.xml”檔案可有可無,否則必須有。

2、關於檔案的位置

檔案在手機中的位置: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

對於GB3的版本,在build\target\product\xxx.mk (xxx為工程名)中,添加語句PRODUCT_COPY_FILES += mediate/frameworks/telephony/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優先於預置號碼的方法

將SIMRecords.java (

JB3之前版本:frameworks\base\telephony\java\com\android\internal\telephony\gsm

JB3,JB5:frameworks\opt\telephony\src\java\com\android\internal\telephony\gsm)

的函數private setVoiceMailByCountry(String spn)中的語句if (mVmConfig.containsCarrier(spn))修改為

if (TextUtils.isEmpty(voiceMailTag) && TextUtils.isEmpty(voiceMailNum) && 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)修改為

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 (

JB3之前版本:frameworks\base\telephony\java\com\android\internal\telephony\gsm

JB3,JB5:frameworks\opt\telephony\src\java\com\android\internal\telephony\gsm)中的函數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;

}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.