android预置默认的语音信箱号码具体实现

时间:2022-08-22 07:51:59 

有些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
文件的内容格式为


<?xml version='1.0' encoding='utf-8'?>
<voicemail>
<voicemail numeric="46000" carrier="CMCC" vmnumber="10086" vmtag="CMCC voicemail" />
</voicemail>


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
对于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 (frameworks\base\telephony\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 (frameworks\base\telephony\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).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;
}
标签:android,语音,信箱号码
0
投稿

猜你喜欢

  • Java事件机制要素及实例详解

    2022-11-27 07:10:53
  • Java利用反射对list对象做过滤

    2023-12-23 07:39:17
  • java 排序算法之快速排序

    2022-07-23 17:39:03
  • mybatis if标签判断不生效的解决方法

    2023-11-28 12:30:49
  • Java实现抢红包功能

    2021-08-05 07:47:58
  • spring声明式事务 @Transactional 不回滚的多种情况以及解决方案

    2023-07-06 10:50:33
  • Spring注解@DependsOn解析

    2022-01-11 08:20:35
  • Java文件快速copy复制实例代码

    2021-05-27 12:25:22
  • Java单例模式实现静态内部类方法示例

    2021-08-03 00:36:51
  • java中lambda表达式简单用例

    2023-11-24 23:17:52
  • Java实现动态获取文件的绝对路径

    2022-12-19 00:34:14
  • Java算法实战之排一亿个随机数

    2022-11-22 02:47:26
  • SpringBoot集成Shiro进行权限控制和管理的示例

    2022-12-31 19:23:21
  • SpringMvc返回modelandview返回的页面无法跳转问题及解决

    2023-02-07 23:49:51
  • java微信企业号开发之通讯录

    2022-04-28 12:51:40
  • Java实战入门之双色球彩票小游戏

    2023-05-12 04:07:13
  • TOMCAT内存溢出及大小调整的实现方法

    2023-02-24 06:55:33
  • SpringBoot定制三种错误页面及错误数据方法示例

    2022-03-10 01:15:55
  • java定义二维数组的几种写法(小结)

    2021-07-05 11:52:09
  • C# WebApi 异常处理解决方案

    2021-06-14 16:52:08
  • asp之家 软件编程 m.aspxhome.com