android预置默认的语音信箱号码具体实现
Android 实现 默认 具体 号码 预置
2023-06-13 09:15:01 时间
有些SIM卡在出厂时并没有预置VoiceMailnumber,但运营商又要求能够根据PLMN去自适应的从手机中读取到预设的VMnumber。在此介绍以xml的方式预置VMnumber的方法,以及如何允许用户去修改并能够记住用户的选择。VMnumber使用的优先级为:SIM卡读取>用户设置>xml预置。在用户修改voicemailnumber时,优先存储到SIM卡。若SIM卡存储失败,则以IMSI为单位存储到手机中。
1、支持以XML的方式预置VMnumber,文件名为:voicemail-conf.xml
文件的内容格式为
复制代码代码如下:
1、支持以XML的方式预置VMnumber,文件名为:voicemail-conf.xml
文件的内容格式为
<?xmlversion="1.0"encoding="utf-8"?>
<voicemail>
<voicemailnumeric="46000"carrier="CMCC"vmnumber="10086"vmtag="CMCCvoicemail"/>
</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卡中的VMnumber优先于预置号码的方法
将SIMRecords.java(frameworks\base\telephony\java\com\android\internal\telephony\gsm)中的函数privatesetVoiceMailByCountry(Stringspn)中的语句if(mVmConfig.containsCarrier(spn))修改为
if(TextUtils.isEmpty(voiceMailTag)&&TextUtils.isEmpty(voiceMailNum)&&mVmConfig.containsCarrier(spn))
4、在使用了voicemail-conf.xml来预置VMnumber后,使终端用户可以修改VMnumber的方法
1)在SIMRecords.java中添加语句importandroid.text.TextUtils;
2)在SIMRecords.java中添加一个成员变量booleanisSetByCountry=false;
3)将SIMRecords.java中的函数privatesetVoiceMailByCountry(Stringspn)修改为
privatevoidsetVoiceMailByCountry(Stringspn){
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中的语句caseEVENT_SIM_RECORDS_LOADED:中将语句if(imsi!=null&&imsiFromSIM!=null&&!imsiFromSIM.equals(imsi))
{
…
}
修改为
SharedPreferencessp=PreferenceManager.getDefaultSharedPreferences(getContext());
//当相应卡槽更换SIM卡后,是否清除用户对之前SIM卡的VMnumber设置
booleanclear_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,“resetvmnumberbecausesimchanged”);
SharedPreferences.Editoreditor=sp.edit();
editor.remove(getVmSimImsi());
editor.apply();
setVmSimImsi(null);
}
5)将GSMPhone.java中的函数privatevoidstoreVoiceMailNumber(Stringnumber)中的语句editor.putString(VM_NUMBER+mySimId,number);修改为editor.putString(getSubscriberId(),number);//不再使用卡槽作为保存VMnumber的单位,而使用IMSI
6)将GSMPhone.java中的函数publicStringgetVoiceMailNumber()中的语句if(TextUtils.isEmpty(number))修改为if(TextUtils.isEmpty(number)||((SIMRecords)mIccRecords).isSetByCountry)//如果SIM卡中
//无VMnumber或是通过voicemail-conf.xml来设置的,则应该读取一下Preference,看是否用户
//对此SIM卡设置过VMnumber。
并且将语句number=sp.getString(VM_NUMBER+mySimId,null);修改为
Log.d(LOG_TAG,vmnumfromsimRecords,num=“+number+”isfromfactory=“+((SIMRecords)mIccRecords).isSetbyCountry);
Stringtemp=sp.getString(getSubscriberId(),null);
if(temp!=null)
{
Log.d(LOG_TAG,“replacevmnumwithuserdefined,num=“+temp);
number=temp;
}
相关文章
- xps 转 pdf android版,OakDoc XPS to PDF Converter(XPS文件转PDF格式工具)V2.2 正式版
- android开机动画包制作工具实现「建议收藏」
- android退出app代码,Android应用退出代码各种方式
- Android Studio 安装配置教程 – Windows(详细版)
- 为 64 位版本的 Android Studio 和 Android 模拟器做好准备
- Android前台服务的使用(二)--使用LiveEventBus实现进程间通讯(附源码)
- android toast全屏,Android Toast实现全屏显示
- android线程通信的几种方式_java多线程的实现方式
- 自定义FlowLayout,android flowLayout实现
- 【错误记录】p7zip 交叉编译 Android 版本 NDK 报错 ( Application.mk | APP_ABI := armeabi-v7a arm64-v8a x86 x86_64 )
- 【Android 插件化】VirtualApp 源码分析 ( 添加应用源码分析 | LaunchpadAdapter 适配器 | 适配器添加元素 | PackageAppData 元素 )
- 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor#buildConfigField 方法 | 单独编译生成 BuildConfig 类的任务 )
- 【Android Gradle 插件】Gradle 依赖管理 ② ( build.gradle 中的 dependencies 依赖配置 | DependencyHandler#add 方法介绍 )
- Android中实现多Tab页应用
- 机器人操作系统,除了 Android 还有一个 ROS
- 此应用程序可显示和控制通过USB(或通过TCP / IP)连接的Android设备
- Android实现PHP连接MySQL进行数据交互(android通过php连接mysql)
- android仿微信聊天气泡效果实现思路
- Android网络图片查看显示的实现方法
- android跳转进市场的实现代码
- android实现简单的画画板实例代码
- android实用工具类分享(获取内存/检查网络/屏幕高度/手机分辨率)
- Android判断屏幕是横屏或是竖屏的简单实现方法
- Android实现创建或升级数据库时执行语句