原本只有两个imei号,需要再加个显示meid的
override/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
这个文件来控制能显示的preference的
首先displayPreference这个方法有个循环
for (int simSlotNumber = 1; simSlotNumber < mTelephonyManager.getPhoneCount();simSlotNumber++) {
因为是支持双卡的手机,所以mTelephonyManager.getPhoneCount()返回的是2,那这个循环体就会显示两个preference,而我们需要加一个显示meid所以,让循环再加一次
simSlotNumber < mTelephonyManager.getPhoneCount() + 1
循环体里设置了每个preference应该显示什么
getTitle(int simSlot)方法里设置preference的标题,我们只需要加个判断当是新加的preference就显示MEID
if (simSlot == 2){
return mContext.getString(R.string.status_meid_number);
}
其他的还是源码
return phoneType == PHONE_TYPE_CDMA ? getTitleForCdmaPhone(simSlot)
: getTitleForGsmPhone(simSlot);
这里直接返回GSM的 return getTitleForGsmPhone(simSlot);
反正都是显示IMEI
然后就是小标题方法getSummary(int simSlot)
同理也是
if (simSlot == 2){
return mTelephonyManager.getMeid(0);
}
源码是
return phoneType == PHONE_TYPE_CDMA ? mTelephonyManager.getMeid(simSlot)
: mTelephonyManager.getImei(simSlot);
意思是如果是CMDA那就返回显示的是MEID,所以原本设计的就是PHONE_TYPE_CDMA的和meid挂钩
这个preference点击后还要进入一个dialog,这里面也需要改
src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
populateImeiInfo这个方法里源码有
if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
这个判断改成我们新加的if (mSlotId == 2) {,然后再执行updateDialogForCdmaPhone();
就是显示对话框内容,updateDialogForCdmaPhone这个方法里主要就是mDialog.setText(ID_MEID_NUMBER_VALUE, getMeid());这个显示meid号就行
所以把其他没用的,原本存在的全去掉
//*/tyd.yantao 20220824 remove useless items
mDialog.removeViewFromScreen(ID_MIN_NUMBER_LABEL);
mDialog.removeViewFromScreen(ID_MIN_NUMBER_VALUE);
mDialog.removeViewFromScreen(R.id.prl_version_label);
mDialog.removeViewFromScreen(ID_PRL_VERSION_VALUE);
//*/
在getMeid方法里换掉原来的获取meid的方法,改为return mTelephonyManager.getMeid(0);
原来的return mTelephonyManager.getMeid(mSlotId);这个出不来,因为这只有一个MEID
还有个方法isValidSlotIndex,里面返回的还是原来的
return slotIndex >= 0 && slotIndex < telephonyManager.getPhoneCount();
需要改为
return slotIndex >= 0 && slotIndex < telephonyManager.getPhoneCount()+1;
因为加了一个preference了,需要同步,如果不同步那么会影响mTelephonyManager的赋值对象实例化,因为在这个类的构造方法ImeiInfoDialogController中
else if(isValidSlotIndex(slotId, tm)) {
mTelephonyManager = tm
而这个tm就是上边获得的
TelephonyManager tm = context.getSystemService(TelephonyManager.class);