概述
最近接到了一个产线反馈的问题,经过复现发现现象如下:在拨号界面输入*#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);
}
这样就可以获取到1个MEID和2个IMEI号,然后再根据客制化需求,将其传到dialog中显示即可。
最后
以上就是甜甜蓝天为你收集整理的*#06*中所显示IMEI和MEID号的客制化的全部内容,希望文章能够帮你解决*#06*中所显示IMEI和MEID号的客制化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复