“*#06#”显示MEID/IMEI的客制化

2017-12-28  本文已影响0人  代码视觉

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中显示即可。

上一篇下一篇

猜你喜欢

热点阅读