android 虛擬運營商忽略國內漫遊

有些地區的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))) {
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章