我是靠谱客的博主 甜甜蓝天,最近开发中收集的这篇文章主要介绍*#06*中所显示IMEI和MEID号的客制化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近接到了一个产线反馈的问题,经过复现发现现象如下:在拨号界面输入*#06#,插入移动联通卡或者出现imei号正确,插入电信卡时出现的meid号是错误的,显示的仍然是imei号,打印log后发现根本没有获取到meid号,但是手机是支持电信卡的,

上网搜索一圈后发现基本给出的结果相同,都是通过手机管理器类的getDeviceId()来获取的,官方文档也是这么解释,但是实际情况却是不行,以下是网上提供的方法,但是验证无效:

import android.telephony.TelephonyManager;

TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);

  /*  
   * 唯一的设备ID:  
   * GSM手机的 IMEI 和 CDMA手机的 MEID.   
   * Return null if device ID is not available.  
   */   
  tm.getDeviceId();//String 
以上方法实测结果是只能获取到imei号,meid号始终获取不到



若需要显示meid号可使用下面的方法来解决:

1.修改 : alps/frameworks/opt/telephony/src/java/com/android/internal/telephony/cdma/CDMAPhone.java的 handlemessage()方法,在switch对应的case:EVENT_GET_DEVICE_IDENTITY_DONE处理过程中,将读到的mMeid保存在SystemProperties中,这样在开机初始化之后,MEID就都保存到了SystemProperties中,在phone进程以及第三方APK中都可以通过SystemProperties获取到它们。

SystemProperties.set("gsm.mtk.meid",mMeid);

2.修改:alps/packages/apps/Dialer/src/com/android/dialer/SpecialCharSequenceMgr.java

handleDeviceIdDisplay方法,直接通过SystemProperties可以获取到1个MEID



imei号可使用tm.getDeviceId();//获取

也可使用定制化的方法获取,方法如下(类似meid号获取):

在GSMPhone.java的handlemessage方法switch对应的case:EVENT_GET_IMEI_DONE处理过程中,将读到的mImei保存到SystemProperties中,可以根据slotId按如下例子的格式设键值(命名可跟公司名相关联)。这样在开机初始化之后,GSM Modem两个protocol对应的IMEI就都保存到了SystemProperties中,在phone进程以及第三方APK中都可以通过SystemProperties获取到它们。

例如:

if(mPhoneId == PhoneConstants.SIM_ID_1|| mPhoneId = 10) //SIM1
{
    Log.d("abc","is SIM1,IMEI is:"+mImei);
    SystemProperties.set("gsm.mtk.imei1",mImei);
}
else if(mPhoneId == PhoneConstants.SIM_ID_2 || mPhoneId =11) //SIM2
{
    Log.d("abc","is SIM2,IMEI is:"+mImei);
    SystemProperties.set("gsm.mtk.imei2",mImei);
}



这样就可以获取到1MEID2IMEI然后再根据客制化需求,将其传到dialog中显示即可。




最后

以上就是甜甜蓝天为你收集整理的*#06*中所显示IMEI和MEID号的客制化的全部内容,希望文章能够帮你解决*#06*中所显示IMEI和MEID号的客制化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部