From: snickersun Date: Sat, 14 Nov 2020 10:11:14 +0000 (+0800) Subject: 修改断网逻辑,12次心跳检测出断网或者心跳没有响应的情况下,通过飞行模式开关重置网络。 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=7210e657379bb1b92df7e3f1799f9eb228d1c043;p=protocol_srv.git 修改断网逻辑,12次心跳检测出断网或者心跳没有响应的情况下,通过飞行模式开关重置网络。 --- diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index 9ae656f1..ac9c1d77 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -1549,7 +1549,10 @@ public class CoreService extends Service { private static int no_network_Heartbeats_Count=0; public void ReConnectToServer(){ - + long timeSincelastReceive=0; + if(Runtime.lastLinkReceiveStamp>0) + timeSincelastReceive=(System.currentTimeMillis()-Runtime.lastLinkReceiveStamp)/1000; + if (timeSincelastReceive>0) ICLogger.i("距离上次从服务器收到数据,已经有 " + timeSincelastReceive + " 秒!"); if (SimSignalUtil.checkNet(runtime.getContextProxy().context) ) { //里面如果连接成功 connectionOpen 会先发送 AP00 登录包 和发送AP03 心跳包 , // isServerConnected 成功则停止重试, KeepAlive会检测AP03心跳包的成功与否。此处只管socket连接是否成功 @@ -1581,13 +1584,21 @@ public class CoreService extends Service { no_network_Heartbeats_Count++; stopConnectionRetryTimer(); } - if( no_network_Heartbeats_Count >10){ + if( no_network_Heartbeats_Count >12){ ICLogger.i("当前第"+no_network_Heartbeats_Count+"次心跳都没有连接服务器成功 > 10 ,重置SIM卡尝试重新注册网络!"); - SimSignalUtil.send_at_to_reset_simcard(runtime); + //SimSignalUtil.send_at_to_reset_simcard(runtime); //直接下此命令不能实现断网重连,所以干脆采用关闭网络再打开的方式。 + SimSignalUtil.setAirMode(this,"OpenAirplane"); + mHandler.postDelayed(reopenSim,5000); no_network_Heartbeats_Count=0;//重置Sim卡后重置计数。防止后面多次重置Sim卡。 } } - + private Runnable reopenSim =new Runnable(){ + @Override + public void run() { + if (CoreService.getInstance()!=null) + SimSignalUtil.setAirMode(CoreService.getInstance(),"CloseAirplane"); + } + }; public void stopConnectionRetryTimer(){ if (mTimer_retry_connect !=null){ mTimer_retry_connect.shutdownNow(); diff --git a/app/src/main/java/com/enqualcomm/support/LocationClient.java b/app/src/main/java/com/enqualcomm/support/LocationClient.java index 9074ea46..5eda9bc1 100644 --- a/app/src/main/java/com/enqualcomm/support/LocationClient.java +++ b/app/src/main/java/com/enqualcomm/support/LocationClient.java @@ -1114,7 +1114,7 @@ public void updateCellInfo() { case 1: if (!isAirModeOn && !isScreenOn) { - this.mSignalUtil.setAirMode("OpenAirplane"); + // this.mSignalUtil.setAirMode("OpenAirplane"); runtime.isAirMode = true; notifiSetAirModeMethod(); @@ -1124,7 +1124,7 @@ public void updateCellInfo() { case 0: if (isAirModeOn) { - this.mSignalUtil.setAirMode("CloseAirplane"); + //this.mSignalUtil.setAirMode("CloseAirplane"); runtime.isAirMode = false; notifiSetAirModeMethod(); return; diff --git a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java index 237ff0df..bc26c6ad 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/Runtime.java +++ b/app/src/main/java/com/enqualcomm/support/bean/Runtime.java @@ -518,7 +518,8 @@ public class Runtime { public int saveStepCount; private boolean shutdown; - + + public static long lastLinkReceiveStamp=0; private boolean PowerConnected=false; diff --git a/app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java b/app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java index 654d0d56..50ab9445 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java @@ -240,10 +240,11 @@ public class SimSignalUtil { send_at_cmd(runtime,"AT+SPIMEI=1,"+imei); } - public void setAirMode(String paramString) { + public static void setAirMode(Context context,String paramString) { final ContentResolver cr = context.getContentResolver(); + ICLogger.i("setAirMode "+paramString); if ("OpenAirplane".equals(paramString)) { if (Settings.System.getString(cr, Settings.System.AIRPLANE_MODE_ON).equals("0")) { diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index 7e21969d..c92ad15d 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -42,6 +42,10 @@ public class protocolAPIHelper { 每个字符串如果发现 #,却又没有Header,“IW”则会被丢弃 */ public boolean parserCmd(String cmd_type,byte[] bytes) { + + //只要服务器收到消息,就认为服务器是联通的,保存联通的时间 + Runtime.lastLinkReceiveStamp=System.currentTimeMillis(); + if (is_protocol_not_Initialled()) return false; switch(Config.protocol_no) {