有些地区的MVNO(虚拟运营商Mobile Virtual Network Operator)和国内各MNO(运营商Mobile Network Operator)签订了协议,使用国内所有MNO的网络不算漫游,所以需要判定如果MVNO的卡注册上国内的plmn,则忽略漫游
上层Ap判定roaming的方法是GsmServiceStateTracker.java中的regCodeIsRoaming;请做如下修改:
--- a/frameworks/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/frameworks/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -220,6 +220,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
private String mHhbName = null;
private String mCsgId = null;
private int mFemtocellDomain = 0;
+ private SIMRecords simRecords = null;
/* ALPS00236452: manufacturer maintained table for specific operator with multiple PLMN id */
// ALFMS00040828 - add "46008"
@@ -1348,7 +1349,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
updateSpnDisplay(false);
}
- protected void updateSpnDisplay(boolean forceUpdate) {
+ public void updateSpnDisplay(boolean forceUpdate) {
if (isInSvlteMode()) {
mSvlteSST.updateGsmCdmaServiceState(mSS, 0);
final int updateSpnPhoneId = mSvlteSST.getUpdateSvlteSpnPhoneId(SST_TYPE);
@@ -1363,7 +1364,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
log("updateSpnDisplay, Use GSMSST (" + mPhone.getPhoneId()
+ ") to update spn display, forceUpdate = " + forceUpdate);
}
- SIMRecords simRecords = null;
+
IccRecords r = mPhone.mIccRecords.get();
if (r != null) {
simRecords = (SIMRecords) r;
@@ -3124,7 +3125,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
}
}
- if ((ignoreDomesticRoaming == true) && (isRoaming == true)
+ if ((((null != simRecords) && (PhoneConstants.MVNO_TYPE_NONE != simRecords.getMvnoMatchType())) ||
+ (ignoreDomesticRoaming == true)) && (isRoaming == true)
&& (strServingPlmn != null) && (strHomePlmn != null)) {
log("ServingPlmn = " + strServingPlmn + " HomePlmn = " + strHomePlmn);
if (strHomePlmn.substring(0, 3).equals(strServingPlmn.substring(0, 3))) {