修改断网逻辑,12次心跳检测出断网或者心跳没有响应的情况下,通过飞行模式开关重置网络。
authorsnickersun <scy@incartech.cn>
Sat, 14 Nov 2020 10:11:14 +0000 (18:11 +0800)
committersnickersun <scy@incartech.cn>
Sat, 14 Nov 2020 10:11:14 +0000 (18:11 +0800)
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/LocationClient.java
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java

index 9ae656f..ac9c1d7 100644 (file)
@@ -1549,7 +1549,10 @@ public class CoreService extends Service {
     private static int no_network_Heartbeats_Count=0;\r
 \r
     public void ReConnectToServer(){\r
-\r
+        long timeSincelastReceive=0;\r
+        if(Runtime.lastLinkReceiveStamp>0)\r
+            timeSincelastReceive=(System.currentTimeMillis()-Runtime.lastLinkReceiveStamp)/1000;\r
+        if (timeSincelastReceive>0) ICLogger.i("距离上次从服务器收到数据,已经有 " + timeSincelastReceive + " 秒!");\r
         if (SimSignalUtil.checkNet(runtime.getContextProxy().context) ) {\r
             //里面如果连接成功 connectionOpen 会先发送 AP00 登录包 和发送AP03 心跳包 ,\r
             // isServerConnected 成功则停止重试, KeepAlive会检测AP03心跳包的成功与否。此处只管socket连接是否成功\r
@@ -1581,13 +1584,21 @@ public class CoreService extends Service {
             no_network_Heartbeats_Count++;\r
             stopConnectionRetryTimer();\r
         }\r
-        if( no_network_Heartbeats_Count >10){\r
+        if( no_network_Heartbeats_Count >12){\r
             ICLogger.i("当前第"+no_network_Heartbeats_Count+"次心跳都没有连接服务器成功 > 10 ,重置SIM卡尝试重新注册网络!");\r
-            SimSignalUtil.send_at_to_reset_simcard(runtime);\r
+            //SimSignalUtil.send_at_to_reset_simcard(runtime); //直接下此命令不能实现断网重连,所以干脆采用关闭网络再打开的方式。\r
+            SimSignalUtil.setAirMode(this,"OpenAirplane");\r
+            mHandler.postDelayed(reopenSim,5000);\r
             no_network_Heartbeats_Count=0;//重置Sim卡后重置计数。防止后面多次重置Sim卡。\r
         }\r
     }\r
-\r
+    private Runnable reopenSim =new Runnable(){\r
+        @Override\r
+        public void run() {\r
+            if (CoreService.getInstance()!=null)\r
+                SimSignalUtil.setAirMode(CoreService.getInstance(),"CloseAirplane");\r
+        }\r
+    };\r
     public void stopConnectionRetryTimer(){\r
         if (mTimer_retry_connect !=null){\r
             mTimer_retry_connect.shutdownNow();\r
index 9074ea4..5eda9bc 100644 (file)
@@ -1114,7 +1114,7 @@ public void updateCellInfo() {
 \r
       case 1:\r
         if (!isAirModeOn && !isScreenOn) {\r
-          this.mSignalUtil.setAirMode("OpenAirplane");\r
+        //  this.mSignalUtil.setAirMode("OpenAirplane");\r
           runtime.isAirMode = true;\r
           notifiSetAirModeMethod();\r
 \r
@@ -1124,7 +1124,7 @@ public void updateCellInfo() {
       case 0:\r
 \r
         if (isAirModeOn) {\r
-          this.mSignalUtil.setAirMode("CloseAirplane");\r
+          //this.mSignalUtil.setAirMode("CloseAirplane");\r
           runtime.isAirMode = false;\r
           notifiSetAirModeMethod();\r
           return;\r
index 237ff0d..bc26c6a 100644 (file)
@@ -518,7 +518,8 @@ public class Runtime {
   public int saveStepCount;\r
   \r
   private boolean shutdown;\r
-  \r
+\r
+  public static long lastLinkReceiveStamp=0;\r
 \r
   private boolean PowerConnected=false;\r
 \r
index 654d0d5..50ab944 100644 (file)
@@ -240,10 +240,11 @@ public class SimSignalUtil {
     send_at_cmd(runtime,"AT+SPIMEI=1,"+imei);\r
   }\r
 \r
-  public void setAirMode(String paramString) {\r
+  public static void setAirMode(Context context,String paramString) {\r
 \r
     final ContentResolver cr = context.getContentResolver();\r
 \r
+    ICLogger.i("setAirMode "+paramString);\r
     if ("OpenAirplane".equals(paramString))\r
     {\r
       if (Settings.System.getString(cr, Settings.System.AIRPLANE_MODE_ON).equals("0")) {\r
index 7e21969..c92ad15 100644 (file)
@@ -42,6 +42,10 @@ public class protocolAPIHelper {
        每个字符串如果发现 #,却又没有Header,“IW”则会被丢弃\r
         */\r
     public boolean parserCmd(String cmd_type,byte[] bytes) {\r
+\r
+        //只要服务器收到消息,就认为服务器是联通的,保存联通的时间\r
+        Runtime.lastLinkReceiveStamp=System.currentTimeMillis();\r
+\r
         if (is_protocol_not_Initialled()) return false;\r
         switch(Config.protocol_no)\r
         {\r