先看下android7.0项目的phone关系图
通过关系图可以看到Phone.java是核心:
class Phone extends Handler implements PhoneInternalInterface
GsmCdmaPhone, SipPhoneBase, ImsPhoneBase都继承Phone。
这里着重看下GsmCdmaPhone的逻辑,其应该是GsmPhone和CdmaPhone的联合处理,比如:
@Override
protected Connection dialInternal(String dialString, UUSInfo uusInfo, int videoState,
Bundle intentExtras)
throws CallStateException {
if (isPhoneTypeGsm()) {
// Only look at the Network portion for mmi
String networkPortion = PhoneNumberUtils.extractNetworkPortionAlt(newDialString);
GsmMmiCode mmi =
GsmMmiCode.newFromDialString(networkPortion, this, mUiccApplication.get());
if (mmi == null) {
......
return mCT.dial(newDialString, uusInfo, intentExtras);
}
} else {
return mCT.dial(newDialString);
}
}
可以在代码中看到很多关于isPhoneTypeGsm(),其是gsm和cdma不同功能的分别处理,可以注意下。