crDroid 9.0 でZenfone2Laser用を作るとSIM1とSIM2のIMEIが同じになっており、バグが潜んでいるっぽい。
どうせシングルでしか使わないので、シングルモードのROMを作りたい
どうやってマルチSIMなのか判定しているのか?を調べてみた
マルチSIMに関するHidden APIには以下があるらしい
・getMultiSimConfiguration() ・getSimCount() ・isMultiSimEnabled() ・isMultiSimSupported()
ソースから調べてみた
frameworks/base/telephony/java/android/telephony/TelephonyManager.java
/** @hide */ public int getSimCount() { // FIXME Need to get it from Telephony Dev Controller when that gets implemented! // and then this method shouldn't be used at all! if(isMultiSimEnabled()) { return getPhoneCount(); } else { return 1; } }
frameworks/base/telephony/java/android/telephony/TelephonyManager.java
/** {@hide} */ public boolean isMultiSimEnabled() { return (multiSimConfig.equals("dsds") || multiSimConfig.equals("dsda") || multiSimConfig.equals("tsts")); }
frameworks/base/telephony/java/android/telephony/TelephonyManager.java
/** * Returns the multi SIM variant * Returns DSDS for Dual SIM Dual Standby * Returns DSDA for Dual SIM Dual Active * Returns TSTS for Triple SIM Triple Standby * Returns UNKNOWN for others */ /** {@hide} */ public MultiSimVariants getMultiSimConfiguration() { String mSimConfig = SystemProperties.get(TelephonyProperties.PROPERTY_MULTI_SIM_CONFIG); if (mSimConfig.equals("dsds")) { return MultiSimVariants.DSDS; } else if (mSimConfig.equals("dsda")) { return MultiSimVariants.DSDA; } else if (mSimConfig.equals("tsts")) { return MultiSimVariants.TSTS; } else { return MultiSimVariants.UNKNOWN; } }
つまり、PROPERTY_MULTI_SIM_CONFIG=persist.radio.multisim.configが判定の元になっているらしい。
adb shellでgetpropすると以下の値が出てくる
# getprop | grep radio [persist.radio.multisim.config]: [dsds]
ちなみに、adb で以下のコマンドを変更するといきなりシングルSIMモードに変わった
# setprop persist.radio.multisim.config ss
device/asus/msm8916-commonのソースをよく見るとsystem_prop.mk でやっていた。
persist.radio.multisim.config=dsds
なのでこの行を変更してみる ー>変化はするが、ソースに記述されている以外の値にするとモデムの認識まで行われない まだ他にもみるところがあるらしい。