編輯:關於Android編程
前言
歡迎大家我分享和推薦好用的代碼段~~
聲明
歡迎轉載,但請保留文章原始出處:
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;
}
1.概述 Android中關於控制開關和頁面/狀態切換的使用場景還是比較多的。源生做的支持也有比如RadioGroup 和Tabhost等。這裡准備通過自定
在項目開發中,帶刪除按鈕輸入框也是人們常常用到的,該文章便介紹一下如何創建一個帶刪除輸入框。其中,需要解決的問題如下:a)創建自定義editText類b)在自定義edit
我們經常遇到一個需求,就是給別人使用我們工程的時候,為了能夠屏蔽代碼,把代碼封裝成jar包提供給第三方使用,但是這樣我們的資源文件怎麼給對方用呢? 網上有很多方法,有用C
紅米note3介紹:外觀設計紅米Note3金屬機身背面是三段式設計,上下兩端為塑料材質。配置方面紅米Note3采用5.5英寸1080P屏幕,1300萬像素後