添加选择默认apn功能
authorsnickersun <snickersun@qq.com>
Tue, 6 Jul 2021 19:08:40 +0000 (03:08 +0800)
committersnickersun <snickersun@qq.com>
Tue, 6 Jul 2021 19:08:40 +0000 (03:08 +0800)
app/src/main/java/com/enqualcomm/support/Config.java
app/src/main/java/com/enqualcomm/support/bean/ApnSetting.java
app/src/main/java/com/enqualcomm/support/utils/APNUtil.java
app/src/main/java/com/enqualcomm/support/utils/ApnEditor.java

index a57ea84..19e7ad5 100644 (file)
@@ -42,6 +42,8 @@ public class Config {
     //如果重试都失败,则丢弃命令不进行盲点续传
     public static boolean discard_cmd_after_retryfailed = true;
 
+    public static boolean enableDataRoaming=false;
+
     public static boolean forceMoveCheck = true;
     public static boolean forceWearCheck = true;
 
@@ -910,6 +912,7 @@ public class Config {
             noPPGSensor = false;
             noTempSensor = false;
             L004_BroadCastActionStrip = true;
+            enableDataRoaming=true;
             Config.forceMoveCheck = false; //即爱对gps不进行运动检测,此变量专门为了给其他协议进行强制运动检测用的。
 
         } else if (Config.custom_name.equals("l005")) {
@@ -931,6 +934,7 @@ public class Config {
             noPPGSensor = true;
             noTempSensor = true;
             L004_BroadCastActionStrip = true;
+            enableDataRoaming=true;
             forceMoveCheck = false; //即爱对gps不进行运动检测,此变量专门为了给其他协议进行强制运动检测用的。
         } else if (custom_name.equals("YQ") || custom_name.equals("YQ_EN")) {
             ConfigAlarm(Runtime.AlarmType.ALARM_CUTOFF, true);
index 71936ba..a3320fe 100644 (file)
@@ -1,6 +1,7 @@
 package com.enqualcomm.support.bean;
 
 public class ApnSetting {
+       private String mID;
        private String mNameStr;
        private String mApnStr;
        private String mProxyStr;
@@ -21,6 +22,8 @@ public class ApnSetting {
        private String mMvnoTypeStr;
        private String mMvnoMatchDataStr;
        public ApnSetting(){}
+       public String getID(){return mID;}
+       public void setID(String id){mID=id;}
        public String getmNameStr() {
                return mNameStr;
        }
@@ -137,7 +140,7 @@ public class ApnSetting {
        }
        @Override
        public String toString() {
-               return "ApnSetting [mNameStr=" + mNameStr + ", mApnStr=" + mApnStr
+               return "ApnSetting [id = "+mID+", mNameStr=" + mNameStr + ", mApnStr=" + mApnStr
                                + ", mProxyStr=" + mProxyStr + ", mPortStr=" + mPortStr
                                + ", mUserStr=" + mUserStr + ", mServerStr=" + mServerStr
                                + ", mPasswordStr=" + mPasswordStr + ", mMmscStr=" + mMmscStr
@@ -153,7 +156,7 @@ public class ApnSetting {
 
        public String toShortString() {
 
-               return "APNSettings name = " +mNameStr+
+               return "APNSettings id = "+mID+" ,name = " +mNameStr+
                                " ,mcc="+mMccStr+
                                " ,mnc="+mMncStr+
                                " ,apn="+mApnStr+
index 3b91b87..2ed39a4 100644 (file)
@@ -5,13 +5,47 @@ import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
+import android.provider.Telephony;
+import android.sim.Sim;
 import android.telephony.TelephonyManager;
+import android.util.Log;
 import android.widget.Toast;
 
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneFactory;
 import com.enqualcomm.support.bean.ApnSetting;
+import android.sim.SimManager;
+
+import java.lang.reflect.Method;
 
 public class APNUtil {
 
+    private static Phone mPhone=null;
+    public static void enableRoaming(Context context,boolean roaming) {
+
+        String phoneFactoryName = "com.android.internal.telephony.PhoneFactory";
+        String phoneName = "com.android.internal.telephony.Phone";
+        try {
+            Class phoneFactoryClass = null;
+            phoneFactoryClass = Class.forName(phoneFactoryName);
+            Class phoneClass = Class.forName(phoneName);
+            // Get the default phone
+            if (mPhone == null) {
+                // Do the best we can
+                Method getDefaultPhone = phoneFactoryClass.getMethod("getDefaultPhone");
+                Object phoneObject = getDefaultPhone.invoke(null);
+
+                mPhone = (Phone)phoneObject;
+            }
+            ICLogger.d("updatePhone:- isRoaming =" + mPhone.getDataRoamingEnabled() +" to " +roaming);
+            mPhone.setDataRoamingEnabled(roaming);
+        } catch (Exception e) {
+           ICLogger.e(e.getMessage(),e);
+        }
+
+    }
+
+
     public static String getCurrentAPN(Context context){
         String APNSTR="";
         APNSTR=ApnEditor.getApnEditorInstance(context).getCurrentAPN();
@@ -38,6 +72,21 @@ public class APNUtil {
         }
     }
 
+    /***
+     *  APNUtil.getCurrentAPN(this);
+     *  APNUtil.selectAPN("240","07","NXT17.NET",this);
+     * @param mcc
+     * @param mnc
+     * @param apn
+     * @param context
+     * @return
+     */
+    public static boolean selectAPN(String mcc,String mnc,String apn,Context context) {
+        ApnEditor apnEditor=new ApnEditor(context);
+        apnEditor.setDefaultAPN(apn,mcc+mnc);
+
+        return true;
+    }
     public static boolean checkAPN(String mcc,String mnc,String apn,Context context) {
         // 检查系统已经写入的APN
         String found="";
index 40610e9..1db6ff0 100644 (file)
@@ -18,6 +18,7 @@ package com.enqualcomm.support.utils;
 
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
@@ -78,7 +79,7 @@ public class ApnEditor {
     private final static String CURRENT_CARRIER = "ro.operator";
     public final static String SPECIAL_CTCC_NUMERIC = "20404";
     public final static String CTCC_ICCID = "898603,898611";
-
+    private String mID;
     private static String sNotSet;
     private String mName;
     private String mApn;
@@ -227,7 +228,82 @@ public class ApnEditor {
 
     }
 
-    public String queryApn(String apn,String mccmnc){
+    public  void setSelectedApnKey(String key) {
+        //s mSelectedKey = key;
+        ContentResolver resolver = mContext.getContentResolver();
+
+        ContentValues values = new ContentValues();
+        /* SPRD: for multi-sim @{ */
+        // values.put(APN_ID, mSelectedKey);
+        // resolver.update(PREFERAPN_URI, values, null, null);
+        values.put("apn_id", key);
+        resolver.update(
+                Telephony.Carriers.getContentUri(0, Telephony.Carriers.PATH_PREFERAPN),
+                values, null, null);
+        /* @} */
+    }
+
+    public  String getSelectedApnKey() {
+        String key = null;
+
+        /* SPRD: for multi-sim @{ */
+        // Cursor cursor = getContentResolver().query(PREFERAPN_URI, new
+        // String[] {"_id"},
+        // null, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
+        Cursor cursor = mContext.getContentResolver().query(
+                Telephony.Carriers.getContentUri(0, Telephony.Carriers.PATH_PREFERAPN),
+                new String[] {
+                        "_id"
+                },
+                null, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
+        /* @} */
+        if (cursor.getCount() > 0) {
+            cursor.moveToFirst();
+            key = cursor.getString(0);
+        }
+        cursor.close();
+        ICLogger.d(" get default apnkey "+key);
+        return key;
+    }
+    public void setDefaultAPN(String apn, String mccmnc){
+        String apnid=queryApnID(apn,mccmnc);
+        String currentapnid=apnEditor.getSelectedApnKey();
+        ICLogger.d("current APN key "+apnid +" selected APN key " + currentapnid);
+        setSelectedApnKey(apnid);
+        currentapnid=apnEditor.getSelectedApnKey();
+        ICLogger.d("after set APN key "+apnid +" selected APN key " + currentapnid);
+
+
+    }
+    public String queryApnID(String apn,String mccmnc) {
+
+        String where;
+        where = "numeric=\"" + mccmnc + "\"";
+        where += " and name!='CMCC DM'";
+        where += " and apn='"+apn+"'";
+
+        Log.d(TAG,"where = " + where + ",mccmnc =" + mccmnc);
+        mCursor = mContext.getContentResolver().query(mAPNUri, sProjection, where, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
+        String apnsetings="";
+        if (mCursor.moveToFirst()) {
+
+            fill_apnSettings(mCursor,mApnSetting);
+            apnsetings+= mApnSetting.toShortString();
+            while (mCursor.moveToNext()){
+                apnsetings+=";";
+                fill_apnSettings(mCursor,mApnSetting);
+                apnsetings+= mApnSetting.toShortString();
+            }
+        }
+        if (mCursor != null) {
+            mCursor.close();
+            mCursor = null;
+        }
+        ICLogger.d("get APN "+apnsetings);
+        return mApnSetting.getID();
+    }
+
+        public String queryApn(String apn,String mccmnc){
         String where;
         where = "numeric=\"" + mccmnc + "\"";
         where += " and name!='CMCC DM'";
@@ -374,7 +450,6 @@ public class ApnEditor {
 
 
 
-
     private boolean getApnEditable(Cursor cursor) {
         String version = SystemProperties.get(CURRENT_CARRIER, "default");
         if ("vodafone".equalsIgnoreCase(version) ||
@@ -391,7 +466,7 @@ public class ApnEditor {
         // SPRD: for bug 348288: while Cursor is null, return
 
 //            mFirstTime = false;
-
+            mID = (cursor.getString(ID_INDEX));
             mName = (cursor.getString(NAME_INDEX));
             mApn = (cursor.getString(APN_INDEX));
             mProxy = (cursor.getString(PROXY_INDEX));
@@ -480,6 +555,7 @@ public class ApnEditor {
         }
 
         //mApnSetting
+        apnSetting.setID(checkNull(mID));
         apnSetting.setmNameStr(checkNull(mName));
         apnSetting.setmApnStr(checkNull(mApn));
         apnSetting.setmProxyStr(checkNull(mProxy));