“*#06#”显示MEID/IMEI的客制化
C2K双卡项目,在通话界面输入“*#06#”,当有插入电信卡时,会显示主卡MEID+副卡IMEI;当插入移动/联通卡,没有插入电信卡时,会显示2个IMEI。
若需要总是显示MEID+2个IMEI 或有电信卡插入时也只显示2个IMEI,以下是具体办法。
【在L/M版上】
1、在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);
}
2、在CDMAPhone.java的handlemessage方法switch对应的case:EVENT_GET_DEVICE_IDENTITY_DONE处理过程中,将读到的mMeid保存到SystemProperties中,这样在开机初始化之后,MEID就都保存到了SystemProperties中,在phone进程以及第三方APK中都可以通过SystemProperties获取到它们。
例如:SystemProperties.set("gsm.mtk.meid",mMeid);
注意:由于插卡或版本差异,可能出现找不到对应slot的GSMPhone/CDMAPhone对象的情况,导致无法获取到对应的信息;
M之后的版本(M0.M1除外)
/vendor/mediatek/proprietary/frameworks/base/packages/FwkPlugin/src/com/mediatek/op/telephony/DefaultDeviceInformationExt.java
case EVENT_GET_IMEI_DONE
下面去保存
保存MEID,可以在
case EVENT_GET_DEVICE_IDENTITY_DONE
该处来进行保存;
case EVENT_GET_IMEI_DONE:
Rlog.d(TAG, "DefaultDeviceInformationExt handleMessage msg = EVENT_GET_IMEI_DONE");
ar = (AsyncResult) msg.obj;
if (ar.exception != null) {
Rlog.d(TAG, "Null IMEI!!");
break;
}
mImei[mSlotId] = (String) ar.result;
Rlog.d(TAG, "IMEI: " + mImei[mSlotId]);
sendBroadcast();
break;
case EVENT_GET_DEVICE_IDENTITY_DONE:
Rlog.d(TAG, "DefaultDeviceInformationExt " +
"handleMessage msg = EVENT_GET_DEVICE_IDENTITY_DONE");
ar = (AsyncResult) msg.obj;
if (ar.exception != null) {
Rlog.d(TAG, "Null mMeid!! ar.exception = " + ar.exception.toString());
break;
}
String[] respId = (String[]) ar.result;
mMeid = respId[3];
if (mMeid != null) {
mMeid = mMeid.toUpperCase();
}
Rlog.d(TAG, "mMeid: " + mMeid);
sendBroadcast();
break;
3、最后,就根据显示的需要,修改SpecialCharSequenceMgr.java的handleDeviceIdDisplay方法,直接通过SystemProperties可以获取到1个MEID和2个IMEI号,然后再根据客制化需求,将其传到dialog中显示即可。