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
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
\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
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
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
每个字符串如果发现 #,却又没有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