美文网首页
“*#06#”显示MEID/IMEI的客制化

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

作者: 代码视觉 | 来源:发表于2017-12-28 11:05 被阅读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中显示即可。

    相关文章

      网友评论

          本文标题:“*#06#”显示MEID/IMEI的客制化

          本文链接:https://www.haomeiwen.com/subject/tkmmgxtx.html