release V374 版本
authorsnickersun <scy@incartech.cn>
Fri, 13 Mar 2020 02:20:06 +0000 (10:20 +0800)
committersnickersun <scy@incartech.cn>
Fri, 13 Mar 2020 02:20:06 +0000 (10:20 +0800)
1、优化LBS搜索,WIFI和LBS现在都可以快速相应,大概4秒内。
2、GPS和WiFi搜索都添加对工厂测试的支持,工厂测试运行时,就不会对其进行控制,防止冲突。
3、GPS定位优化NMEA 解析,多加了HDOP定位精度日志,以便更好的分析定位情况。
4、优化网络重连机制,延时5秒重连,防止网络切换时新网络还没连接,就停止重连了。并且根据重连的网络是否切换,决定是否需要重新连接网络,防止多次无用重连。造成的频繁登录
5、精简去掉定位时的多重注册,只取有用信息。
6、screenOn时的同步计步信息的心跳包增加服务器响应判断。

13 files changed:
app/debug/ICSer_V373_2003130743_debug.apk [new file with mode: 0644]
app/release/ICSer_V374_2003131011_release.apk [new file with mode: 0644]
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/NMEAListener.java
app/src/main/java/com/enqualcomm/support/adapter/LBSHelper.java
app/src/main/java/com/enqualcomm/support/adapter/protocolAPIHelper.java
app/src/main/java/com/enqualcomm/support/bean/ICLocation.java
app/src/main/java/com/enqualcomm/support/service/KeepAlive.java
app/src/main/java/com/enqualcomm/support/utils/CellInfoUtil.java
app/src/main/java/com/enqualcomm/support/utils/NetworkObservable.java
app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java
app/version_code.properties

diff --git a/app/debug/ICSer_V373_2003130743_debug.apk b/app/debug/ICSer_V373_2003130743_debug.apk
new file mode 100644 (file)
index 0000000..dfef215
Binary files /dev/null and b/app/debug/ICSer_V373_2003130743_debug.apk differ
diff --git a/app/release/ICSer_V374_2003131011_release.apk b/app/release/ICSer_V374_2003131011_release.apk
new file mode 100644 (file)
index 0000000..d3c557c
Binary files /dev/null and b/app/release/ICSer_V374_2003131011_release.apk differ
index 95cfe5e..e4d590e 100644 (file)
@@ -307,7 +307,13 @@ public class CoreService extends Service {
                 CoreService.this.locationClient.updateStepCount();\r
                 Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
                     public void call(Long param1Long) {\r
-                         connection.send(protocolAPIHelper.genStringMessage("heart",protocolAPIHelper.AP03(runtime)));\r
+                        if (connection.isServerConnected()&& runtime.isServerProtocolConnected()) {\r
+                            mKeepAlive.onHeartAlarm(connection, runtime);\r
+                        }else{\r
+                            ICLogger.i("check 发送心跳包时,如果发现服务器没有响应,或者socket连接,则重新尝试连接服务器!");\r
+                            connection.disconnectServer();\r
+                            startConnectionRetryTimer();\r
+                        }\r
                     }\r
                 });\r
 \r
@@ -509,7 +515,7 @@ public class CoreService extends Service {
         startService(new Intent(this, InnerService.class));\r
 \r
         ReConnectToServer();\r
-        this.locationClient.start();\r
+        this.locationClient.init();\r
 \r
 \r
         //设置本service为前台运行,不被会被清理\r
@@ -625,7 +631,7 @@ public class CoreService extends Service {
                 if (!screenon) {\r
                     SimSignalUtil.send_at_to_update_lbs(this.runtime);\r
                 }\r
-                //这里就是为了省电,如果wifi开启,且屏幕关闭,则wifi也关闭\r
+                //这里就是为了省电,如果wifi开启,且屏幕关闭,则wifi也关闭 ,还有获取wifi消息的时候也和它有关\r
                 if (Util.isConnectWifi((this.runtime.getContextProxy()).context) && !screenon) {\r
                     is_wifi_network_ok = true; //如果wifi开启的,则记录wifi状态为开启,以后屏幕开启时,再根据此变量决定是否打开wifi\r
                     Util.turnOffWifiForSleep((this.runtime.getContextProxy()).context, this.runtime);\r
@@ -878,7 +884,7 @@ public class CoreService extends Service {
                     public void run() {\r
                         ReConnectToServer();\r
                     }\r
-                }, 0, 20000); //每次都是断网才需要重连,所以不需要delay,并且每20秒重试一次\r
+                }, 5000, 20000); //每次都是断网才需要重连,delay 5秒重连,并且每20秒重试一次\r
             }\r
         }\r
     }\r
@@ -942,7 +948,7 @@ public class CoreService extends Service {
         saveStepCount();\r
         this.connectionServiceChain.processDetach(this.connection, this.runtime);\r
         this.invokeHandlerServiceChain.processDetach(this.connection, this.runtime);\r
-        this.locationClient.stop();\r
+        this.locationClient.deinit();\r
         this.connection.close();\r
         unregisterReceiver(this.broadcastReceiver);\r
         unregisterReceiver(this.screenOnReceiver);\r
index c7e5c1b..c2e8bce 100644 (file)
@@ -115,13 +115,13 @@ public class LocationClient {
   \r
   int preNetworkTypeNomber;\r
   \r
-  private BroadcastReceiver screenOnReceiver = new BroadcastReceiver() {\r
-      public void onReceive(Context param1Context, Intent param1Intent) {\r
-        if ("android.intent.action.SCREEN_ON".equals(param1Intent.getAction())) {\r
-          LocationClient.this.mSignalUtil.setAirMode("CloseAirplane");\r
-        }\r
-      }\r
-    };\r
+//  private BroadcastReceiver screenOnReceiver = new BroadcastReceiver() {\r
+//      public void onReceive(Context param1Context, Intent param1Intent) {\r
+//        if ("android.intent.action.SCREEN_ON".equals(param1Intent.getAction())) {\r
+//          LocationClient.this.mSignalUtil.setAirMode("CloseAirplane");\r
+//        }\r
+//      }\r
+//    };\r
   \r
   public LocationClient(NettyConnection paramNettyConnection, Runtime paramRuntime) {\r
     connection = paramNettyConnection;\r
@@ -202,8 +202,7 @@ public class LocationClient {
       ICLogger.i("开启wifi扫描");\r
       runtime.setWifiinfo("");\r
       mHasWifiResult = false;\r
-      this.mLbsHelper.registerBroadReceiver();\r
-      this.mLbsHelper.getWifiInfo();\r
+//      this.mLbsHelper.registerWiFiBroadReceiver();\r
       this.mLbsHelper.setOnWiFiInfoListener(new LBSHelper.OnWiFiInfoListener() {\r
           public void getWifiInfoCallBack(String param1String) {\r
               ICLogger.i("get wifi scan Callback " + param1String);\r
@@ -211,6 +210,7 @@ public class LocationClient {
               runtime.setWifiinfo(param1String==null?"":param1String);\r
           }\r
       });\r
+    this.mLbsHelper.getWifiInfo();\r
   }\r
 //  public void EqcAlgorithmInterfaceMethod2() {\r
     public void startGpsLocate() {\r
@@ -302,7 +302,7 @@ public class LocationClient {
             //GPS 优先的话多给些时间(10秒)\r
             if (checktimes> 50) timeout=true;\r
 \r
-            if ((lbs_ok && timeout==true) ||( gps_ok )||(lbs_ok && ( gps_ok ) )||(lbs_ok && ( gps_ok || startSOSLocation==true ) && wifi_ok )||(lbs_ok&&gps_nosignal&&wifi_ok)){\r
+            if ((lbs_ok && timeout==true) ||( gps_ok )||(lbs_ok &&  gps_ok  )||(lbs_ok && ( gps_ok || startSOSLocation==true ) && wifi_ok )||(lbs_ok&&gps_nosignal&&wifi_ok)){\r
 \r
 \r
               if (startSOSLocation==true){\r
@@ -409,11 +409,6 @@ public void updateCellInfo() {
     CellInfoUtil.setCurrentAttachCellInfo(runtime, getLocationWakeLock());\r
   }\r
 \r
- public void updateSimSignalInfo() {\r
-      SimSignalUtil.getInstance((runtime.getContextProxy()).context);\r
-  }\r
-\r
-\r
 \r
   public PowerManager.WakeLock getLocationWakeLock() {\r
     PowerManager.WakeLock wakeLock = ((PowerManager)(runtime.getContextProxy()).context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getSimpleName());\r
@@ -445,7 +440,7 @@ public void updateCellInfo() {
 \r
     updateStepCount();//update StepCount,保证每次定位前,计步数据是最新的。防止丢数据。\r
     ICLogger.i("forceLocation="+forceLocation+", WorkingMod="+mod+", isLocating="+isLocating+", lastStep="+runtime.getLastStepCount()+", currentStep="+ runtime.getTotalStepCount());\r
-    if (isLocating && 1!=forceLocation) {\r
+    if (isLocating && 1!=forceLocation) { //如果是强制定位,则即使是正在定位,也要执行,因为有时模式变换的时候,需要取消上一次定位信息,马上新的模式定位。\r
       ICLogger.i("locating ,skip location!");\r
       return;\r
     }\r
@@ -460,8 +455,6 @@ public void updateCellInfo() {
     isLocating=true;\r
 \r
     runtime.setLastStepCount(runtime.getTotalStepCount());\r
-    updateSimSignalInfo();\r
-\r
     updateCellInfo();\r
       startWifiScan();\r
     switch(mod){\r
@@ -516,7 +509,7 @@ public void updateCellInfo() {
 \r
 \r
 \r
-  public void start() {\r
+  public void init() {\r
 \r
 \r
     this.mSignalUtil = SimSignalUtil.getInstance((runtime.getContextProxy()).context);\r
@@ -533,9 +526,9 @@ public void updateCellInfo() {
 \r
 \r
     /*注册 亮屏监控*/\r
-    IntentFilter intentFilter = new IntentFilter();\r
-    intentFilter.addAction("android.intent.action.SCREEN_ON");\r
-    (runtime.getContextProxy()).context.registerReceiver(this.screenOnReceiver, intentFilter);\r
+//    IntentFilter intentFilter = new IntentFilter();\r
+//    intentFilter.addAction("android.intent.action.SCREEN_ON");\r
+//    (runtime.getContextProxy()).context.registerReceiver(this.screenOnReceiver, intentFilter);\r
 \r
 \r
 \r
@@ -543,10 +536,10 @@ public void updateCellInfo() {
 //    this.haveChanegTo4GTime = SystemClock.elapsedRealtime();\r
   }\r
   \r
-  public void stop() {\r
+  public void deinit() {\r
 \r
-    (runtime.getContextProxy()).context.unregisterReceiver(this.screenOnReceiver);\r
-    mLbsHelper.unRegisterBroadReceiver();\r
+//    (runtime.getContextProxy()).context.unregisterReceiver(this.screenOnReceiver);\r
+//    mLbsHelper.unRegisterWiFiBroadReceiver();\r
 //    this.executor.execute(new Runnable() {\r
 //      public void run() {\r
 //        Deliver.saveQueue();\r
@@ -599,7 +592,7 @@ public void updateCellInfo() {
   // 飞行模式 1 开启 0 关闭\r
   public void setAirMode(int paramInt) {\r
     boolean isAirModeOn = this.mSignalUtil.IsAirModeOn();\r
-    boolean isScreenOn = this.mSignalUtil.isScreenON();\r
+    boolean isScreenOn = this.mSignalUtil.isScreenON(runtime.getContextProxy().context);\r
     switch (paramInt) {\r
 \r
       case 1:\r
index a48517c..d7ed096 100644 (file)
@@ -23,7 +23,7 @@ import java.util.Iterator;
 import java.util.List;\r
 \r
 public class NMEAListener implements NmeaListener, LocationListener {\r
-  private boolean listening;\r
+  private boolean listening=false;\r
 \r
 \r
   public class  GpsSatellitePriv {\r
@@ -131,30 +131,9 @@ public class NMEAListener implements NmeaListener, LocationListener {
 //      if (Config.LOG_TOFILE)\r
 //        FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "GPS", "GPRMC GPSTime="+utctime+",Lat="+Lat+",Lon="+lon+",fixed="+fixed+",speed="+speed);\r
 \r
-      StringBuilder sb=new StringBuilder();\r
-      sb.append("GPRMC, location time= " + TimeUtil.getLocalTime() + " ,lon= " + lon + ", lat= " + Lat + ","+fixed+" FixedCount=" + locationFixedCount + ", speed=" + speed);\r
-      ICLogger.i(sb.toString());\r
-      if (Config.LOG_TOFILE)\r
-        FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "GPS", sb.toString());\r
-      //定位了,\r
-      if (fixed.equals("A")) {\r
-        locationFixedCount++;\r
-\r
-\r
-\r
-        if (speed.trim().isEmpty())speed="0.0";\r
-        runtime.getLocationInstance().setLocation(Lat, lon,Double.valueOf(speed), 0, numSatelliteList.size());\r
-        if (locationFixedCount > MaxFixedTimes) {\r
-               /*\r
-                只有当前GPS已经定位,且location不为空才给 runtime赋值GPS坐标。\r
-                延迟MaxFixedTimes秒后才设置runtime的定位标志,以便稳定坐标值。\r
-              */\r
-          runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_FIXED);\r
-          ICLogger.i("定位"+locationFixedCount+"次 > "+MaxFixedTimes+", set LOCATION_FIXED ");\r
-          if (!noStop) {\r
-            stopListen();\r
-          }\r
-        }\r
+      if (fixed.trim().equals("A")) {\r
+        if (speed.trim().isEmpty()) speed = "0.0";\r
+        runtime.getLocationInstance().setSpeed(Float.valueOf(speed));\r
       }\r
 \r
     }else if (nmeastr.startsWith("$GPGSV,")) {\r
@@ -216,7 +195,7 @@ public class NMEAListener implements NmeaListener, LocationListener {
         //最后一页,打印搜星情况,并作一些判断。\r
         StringBuilder sb=new StringBuilder();\r
         sb.append("搜索"+searchCout+"次,搜索到卫星个数" + SatlitesCount+", [SNR>0] ="+numSatelliteList.size());\r
-        sb.append(", Max 3 SNR [");\r
+        sb.append(", Max 5 SNR [");\r
         for (int i=0;i<max3Satellite.size();i++){\r
           sb.append(max3Satellite.get(i).getSnr()+",");\r
         }\r
@@ -278,8 +257,35 @@ public class NMEAListener implements NmeaListener, LocationListener {
       String Lat=tmplist[2];\r
       String lon=tmplist[4];\r
       String fixed=tmplist[6];\r
-//      ICLogger.i("GPGGA GPSTime="+utctime+",Lat="+Lat+",Lon="+lon+",fixed="+fixed);\r
+      String usedStarts=tmplist[7];\r
+      String hdop=tmplist[8];\r
+      if ( (fixed.trim().equals("1"))||(fixed.trim().equals("2"))||(fixed.trim().equals("6"))){\r
+        //定位\r
+        StringBuilder sb=new StringBuilder();\r
+        sb.append("GPGGA, location time= " + TimeUtil.getLocalTime() + ", FixedCount=" + locationFixedCount + ", GPSTime="+utctime+", Lat="+Lat+", Lon="+lon+", fixed="+fixed+", hdop="+hdop+", usedStarts="+usedStarts);\r
+        ICLogger.i(sb.toString());\r
+        if (Config.LOG_TOFILE)\r
+          FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "GPS", sb.toString());\r
+        //定位了,\r
 \r
+          locationFixedCount++;\r
+\r
+          if (locationFixedCount > MaxFixedTimes) {\r
+               /*\r
+                只有当前GPS已经定位,且location不为空才给 runtime赋值GPS坐标。\r
+                延迟MaxFixedTimes秒后才设置runtime的定位标志,以便稳定坐标值。\r
+              */\r
+            runtime.getLocationInstance().setLocation(Lat,lon);\r
+            runtime.getLocationInstance().setUsedStarts(Integer.valueOf(usedStarts.trim()));\r
+            runtime.getLocationInstance().setHod(Float.valueOf(hdop.trim()));\r
+            runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_FIXED);\r
+            ICLogger.i("定位"+locationFixedCount+"次 > "+MaxFixedTimes+", set LOCATION_FIXED ");\r
+            if (!noStop) {\r
+              stopListen();\r
+            }\r
+          }\r
+\r
+      }\r
 \r
     }else if (nmeastr.startsWith("$GPGSA,")) {\r
 \r
@@ -306,11 +312,14 @@ public class NMEAListener implements NmeaListener, LocationListener {
 //    字段17:VDOP垂直精度因子(0.5 - 99.9)\r
 //    字段18:校验值($与*之间的数异或后的值)\r
 \r
-      String tmplist[]=nmeastr.split(",");\r
-      String locationmod=tmplist[1];\r
-      String fixed=tmplist[2];\r
-//      ICLogger.i("GPGSA locationMode="+locationmod+",fixed="+fixed);\r
-\r
+//      String tmplist[]=nmeastr.split(",");\r
+//      String locationmod=tmplist[1];\r
+//      String fixed=tmplist[2];\r
+//      String hdop=tmplist[16];\r
+//      if (!fixed.trim().equals("1")){\r
+//        //定位\r
+//        ICLogger.i("GPGSA fixed="+fixed+",hdop="+hdop);\r
+//      }\r
     }\r
   }\r
   \r
@@ -350,51 +359,6 @@ public class NMEAListener implements NmeaListener, LocationListener {
     boolean b3 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundleHot);\r
     return b3;\r
   }\r
-  private GpsStatus.Listener statusListener = new GpsStatus.Listener() {\r
-    public void onGpsStatusChanged(int event) { // GPS状态变化时的回调,如卫星数\r
-      GpsStatus status = locationManager.getGpsStatus(null); //取当前状态\r
-      updateGpsStatus(event, status); //只更新状态\r
-      numberOfSatellites = numSatelliteList.size();\r
-\r
-      switch (event){\r
-        case  GpsStatus.GPS_EVENT_SATELLITE_STATUS:\r
-\r
-\r
-\r
-          break;\r
-        case  GpsStatus.GPS_EVENT_FIRST_FIX:\r
-          //普通测试,必须定位才算通过\r
-//          +" cost "+status.getTimeToFirstFix()+"ms");\r
-//          定位算通过\r
-            gpsMode = GPS_CURRENT_STATUS.GPS_FIXED;\r
-\r
-      ICLogger.i("GPS_EVENT_FIRST_FIX !");\r
-         //  delaystop();\r
-\r
-          break;\r
-        case  GpsStatus.GPS_EVENT_STARTED:\r
-          // tvGps.setText("GPS_EVENT_STARTED");\r
-          gpsMode=GPS_CURRENT_STATUS.GPS_LISTENING;\r
-          runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_SEARCHING);\r
-\r
-          listening=true;\r
-          break;\r
-        case  GpsStatus.GPS_EVENT_STOPPED:\r
-          //  tvGps.setText("GPS_EVENT_STOPPED");\r
-          gpsMode = GPS_CURRENT_STATUS.GPS_NOSINGAL;\r
-//          runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_CLOSED);\r
-\r
-          listening=false;\r
-          break;\r
-        default:\r
-          break;\r
-      }\r
-\r
-\r
-\r
-\r
-    }\r
-  };\r
 \r
 \r
   private final int MSG_WHAT_GPS_FIXED=300;\r
@@ -446,70 +410,11 @@ public class NMEAListener implements NmeaListener, LocationListener {
         }\r
       }\r
     }\r
-    if (max3Satellite.size()>3){ //超过三个,谁小就删掉\r
-      max3Satellite.remove(3);\r
+    if (max3Satellite.size()>5){ //超过三个,谁小就删掉\r
+      max3Satellite.remove(5);\r
     }\r
 \r
   }\r
-  private int updateGpsStatus(int event, GpsStatus status) {\r
-    StringBuilder sb2 = new StringBuilder("");\r
-    float strengh = 0;\r
-    searchCout++;\r
-    if (status == null) {\r
-      sb2.append("搜索"+searchCout+"次,搜到卫星个数:" + 0);\r
-      noSignalCount++;\r
-    } else if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {\r
-      int maxSatellites = status.getMaxSatellites();\r
-      Iterator<GpsSatellite> it = status.getSatellites().iterator();\r
-      numSatelliteList.clear();\r
-      int count = 0;\r
-      while (it.hasNext() && count <= maxSatellites) {\r
-        GpsSatellite s = it.next();\r
-        float snr = s.getSnr();\r
-        if (snr > 0) {//只有信躁比不为0的时候才算搜到了星\r
-          strengh = snr;\r
-//                             Toast.makeText(this, "信躁比大于20", Toast.LENGTH_LONG).show();\r
-          //排序取得最大3个SNR\r
-          get3MaxSnrSatellite(new GpsSatellitePriv(s.getPrn(),s.getSnr()));\r
-          numSatelliteList.add(new GpsSatellitePriv(s.getPrn(),s.getSnr()));\r
-        }\r
-\r
-        count++;\r
-      }\r
-      sb2.append("搜索"+searchCout+"次,搜索到卫星个数:"+count+" , (SNR>0):" + numSatelliteList.size()+" \n Max 3 SNRs[ " );\r
-      for (int i=0;i<max3Satellite.size();i++){\r
-        sb2.append(max3Satellite.get(i).getSnr());\r
-        sb2.append(", ");\r
-      }\r
-      sb2.append(" ]");\r
-      // 卫星总数小于2 ,或者 snr小于20\r
-      if (numSatelliteList.size()< 3 && (max3Satellite.size()>0?(max3Satellite.get(0).getSnr()<20?true:false) : true)){\r
-        noSignalCount++;\r
-      }\r
-    }\r
-\r
-    if(!noStop) {\r
-      if (searchCout > SearchTimeout) {\r
-        sb2.append(" 搜索" + searchCout + "次未定位,超过" + SearchTimeout + "限制退出GPS定位");\r
-        gpsMode = GPS_CURRENT_STATUS.GPS_TIMEOUT;\r
-        runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT);\r
-\r
-        stop(MSG_WHAT_GPS_TIMEOUT);\r
-      }\r
-      if (noSignalCount > 10) {\r
-        sb2.append(" 搜索" + searchCout + "次,超过" + noSignalCount + "次没有收到星,退出GPS定位");\r
-        gpsMode = GPS_CURRENT_STATUS.GPS_NOSINGAL;\r
-        runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT);\r
-\r
-        stop(MSG_WHAT_GPS_NOSTAR);\r
-      }\r
-    }\r
-    if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(this.runtime.getCacheDir(),"GPS",sb2.toString());\r
-    ICLogger.i( sb2.toString());\r
-    getBestLocation(locationManager,status);\r
-\r
-    return 0;\r
-  }\r
 \r
   //停止定位\r
   private void stop(int id){\r
@@ -537,96 +442,6 @@ public class NMEAListener implements NmeaListener, LocationListener {
   }\r
   boolean isFrist = true;\r
 \r
-  /**\r
-   * 获取location对象,优先以GPS_PROVIDER获取location对象,当以GPS_PROVIDER获取到的locaiton为null时\r
-   * ,则以NETWORK_PROVIDER获取location对象,这样可保证在室内开启网络连接的状态下获取到的location对象不为空\r
-   *\r
-   * @param locationManager\r
-   * @return\r
-   */\r
-  private void getBestLocation(LocationManager locationManager,GpsStatus status) {\r
-    Location location = null;\r
-    if (locationManager != null) {\r
-\r
-        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);\r
-        if (location == null) {\r
-          ICLogger.i(" GPS Provider get failed , get Network Provider!");\r
-          location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);\r
-        }\r
-\r
-        /*\r
-        只有当前GPS已经定位,且location不为空才给 runtime赋值GPS坐标。\r
-        延迟三秒后才设置runtime的定位标志,以便稳定坐标值。\r
-         */\r
-//      if (location != null  && gpsMode == GPS_CURRENT_STATUS.GPS_FIXED ) {\r
-        if (location != null  ) {\r
-          longitude = location.getLongitude();\r
-          latitude = location.getLatitude();\r
-\r
-\r
-          if (longitude > 0 && latitude > 0 ) {\r
-\r
-            //log msg变量\r
-            StringBuffer sb = new StringBuffer();\r
-            // 经纬度 保留6位小数点\r
-            DecimalFormat df = new DecimalFormat("#.000000");\r
-            String strLatitude = df.format(latitude);\r
-            String strLongitude = df.format(longitude);\r
-\r
-            sb.append(" orig lat=").append(strLatitude).append(", orig lon=").append(strLongitude);\r
-            // 转换单位,从度转换到分\r
-            double intfen= ((longitude - (int)longitude))*60; //小数转换到分为单位\r
-//            double miao= (longitude*100 - (int)(longitude*100)); //\r
-            double last= ((int)longitude)*100 +intfen;\r
-            longitude =last;\r
-            intfen= (latitude - (int)latitude)*60;//小数转换到分为单位\r
-//            miao= (latitude*100 - (int)(latitude*100));\r
-            last= ((int)latitude)*100 +intfen;\r
-            latitude=last;\r
-\r
-            //sucess\r
-            long gpsTime = location.getTime();\r
-\r
-            double altitude = location.getAltitude();// 海拔\r
-\r
-            // 速度\r
-            float speed = location.getSpeed();// 速度 单位 m/s\r
-            speed = (speed * 60) / 1000; // 单位转换 km/h\r
-            // 保留一位小数点\r
-            DecimalFormat dfSpeed = new DecimalFormat("#.0");\r
-            String strSpeed = dfSpeed.format(speed);\r
-            speed = Float.parseFloat(strSpeed);\r
-            int intSpeed = (int) (speed * 10);\r
-            // SimpleLogger.d("intSpeed:"+intSpeed);\r
-\r
-            // 经纬度 保留4位小数点\r
-             df = new DecimalFormat("#.0000");\r
-             strLatitude = df.format(latitude);\r
-             strLongitude = df.format(longitude);\r
-\r
-            locationFixedCount++;\r
-\r
-            sb.append(", gps time= "+TimeUtil.getLocalTime(gpsTime)+" ,lon= " + strLongitude + ", lat= " + strLatitude +" FixedCount="+locationFixedCount+", TimeToFirstFix="+status.getTimeToFirstFix());\r
-            ICLogger.i( sb.toString());\r
-            if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(this.runtime.getCacheDir(),"GPS",sb.toString());\r
-            runtime.getLocationInstance().setLocation(latitude,longitude,speed,0,status.getMaxSatellites());\r
-            if (locationFixedCount > MaxFixedTimes ){\r
-               /*\r
-                只有当前GPS已经定位,且location不为空才给 runtime赋值GPS坐标。\r
-                延迟MaxFixedTimes秒后才设置runtime的定位标志,以便稳定坐标值。\r
-              */\r
-              runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_FIXED);\r
-              if(!noStop){\r
-                stopListen();\r
-              }\r
-            }\r
-          }\r
-\r
-        }\r
-      }\r
-    }\r
-\r
-\r
 \r
   public boolean startListen() {\r
 \r
index c21765e..cd60585 100644 (file)
@@ -23,6 +23,7 @@ import android.telephony.gsm.GsmCellLocation;
 \r
 import com.enqualcomm.support.Config;\r
 import com.enqualcomm.support.bean.Runtime;\r
+import com.enqualcomm.support.utils.DeviceInfoUtil;\r
 import com.enqualcomm.support.utils.FileOutputUtil;\r
 import com.enqualcomm.support.utils.ICLogger;\r
 import com.enqualcomm.support.utils.SimSignalUtil;\r
@@ -31,8 +32,6 @@ import java.util.Collections;
 import java.util.Comparator;\r
 import java.util.Iterator;\r
 import java.util.List;\r
-import java.util.Timer;\r
-import java.util.TimerTask;\r
 \r
 import static android.net.wifi.WifiManager.WIFI_STATE_DISABLED;\r
 import static android.net.wifi.WifiManager.WIFI_STATE_DISABLING;\r
@@ -48,10 +47,9 @@ public class LBSHelper {
     private Context context;\r
     Handler mHandler;\r
     private int mLastSignal;\r
-    private LBSHelper.OnWiFiInfoListener mListener;\r
-    private LBSHelper.MyPhoneStateListener mMyListener;\r
+    private LBSHelper.OnWiFiInfoListener mMyWifiListener;\r
+    private LBSHelper.MyPhoneStateListener mMyPhoneListener;\r
     int mNetworkType;\r
-    private static Timer mTimer;\r
     public Runtime runtime;\r
     private BroadcastReceiver wifiChangedReceiver;\r
     private String wifiInfoResult;\r
@@ -63,10 +61,10 @@ public class LBSHelper {
         this.context = _context;\r
         this.runtime = dev;\r
         initHelper();\r
-        registerBroadReceiver();\r
-        this.mMyListener = new LBSHelper.MyPhoneStateListener();\r
+//        registerWiFiBroadReceiver();\r
+        this.mMyPhoneListener = new LBSHelper.MyPhoneStateListener();\r
         TelephonyManager tm = ((TelephonyManager) LBSHelper.this.context.getSystemService(Context.TELEPHONY_SERVICE));\r
-        tm.listen(this.mMyListener, LISTEN_SIGNAL_STRENGTHS);\r
+        tm.listen(this.mMyPhoneListener, LISTEN_SIGNAL_STRENGTHS);\r
         this.mNetworkType = tm.getNetworkType();\r
     }\r
 \r
@@ -76,95 +74,33 @@ public class LBSHelper {
             public void handleMessage(Message msg) {\r
                 super.handleMessage(msg);\r
                 if (msg.what == 104) {\r
-                    LBSHelper.this.wifiManager.setWifiEnabled(false);\r
-                    if (LBSHelper.this.mListener != null) {\r
-                        LBSHelper.this.mListener.getWifiInfoCallBack((String) null);\r
+                    //停止扫描\r
+                    StringBuilder sb = LBSHelper.this.handScanResults();\r
+                    if (sb == null) {\r
+                        LBSHelper.this.wifiInfoResult = null;\r
+                    } else {\r
+                        LBSHelper.this.wifiInfoResult = sb.toString();\r
                     }\r
-\r
-                    LBSHelper.this.mTimer = null;\r
-                }\r
-            }\r
-        };\r
-        this.wifiChangedReceiver = new BroadcastReceiver() {\r
-            @Override\r
-            public void onReceive(Context context, Intent intent) {\r
-\r
-//                WIFI_STATE_DISABLING = 0\r
-//                WIFI_STATE_DISABLED = 1\r
-//                WIFI_STATE_ENABLING = 2\r
-//                WIFI_STATE_ENABLED = 3\r
-//                WIFI_STATE_UNKNOWN = 4\r
-                switch (intent.getIntExtra("wifi_state", 0)) {\r
-                    case WIFI_STATE_ENABLED:\r
-                        LBSHelper.this.wifiManager.startScan();\r
-                        if (LBSHelper.this.mListener == null) {\r
-                            LBSHelper.this.mMyListener = new MyPhoneStateListener();\r
-\r
-                        }\r
-\r
-                        if (LBSHelper.this.IS_OPEN) {\r
-                            (new Thread(new Runnable() {\r
-                                public void run() {\r
-                                    SystemClock.sleep(3000L);\r
-                                    StringBuilder sb = LBSHelper.this.handScanResults();\r
-                                    if (sb == null) {\r
-                                        LBSHelper.this.wifiInfoResult = null;\r
-                                    } else {\r
-                                        LBSHelper.this.wifiInfoResult = sb.toString();\r
-                                    }\r
-\r
-                                    LBSHelper.this.mListener.getWifiInfoCallBack(LBSHelper.this.wifiInfoResult);\r
-                                    LBSHelper.this.wifiManager.setWifiEnabled(false);\r
-                                    LBSHelper.this.IS_OPEN = false;\r
-                                    LBSHelper.this.IS_HASOPEN = false;\r
-                                    if (LBSHelper.this.mTimer != null) {\r
-                                        LBSHelper.this.mTimer.cancel();\r
-                                        LBSHelper.this.mTimer.purge();\r
-                                        LBSHelper.this.mTimer = null;\r
-                                    }\r
-\r
-                                }\r
-                            })).start();\r
-                            return;\r
-                        } else if (LBSHelper.this.IS_HASOPEN) {\r
-                            if (LBSHelper.this.wifiManager == null) {\r
-                                if (LBSHelper.this.mListener != null) {\r
-                                    LBSHelper.this.mListener.getWifiInfoCallBack((String) null);\r
-                                }\r
-\r
-                                return;\r
+                    if (LBSHelper.this.mMyWifiListener != null) {\r
+                        LBSHelper.this.mMyWifiListener.getWifiInfoCallBack(LBSHelper.this.wifiInfoResult);\r
+\r
+                        if ((runtime.isNoTurnOffWifiOnScreenOff() && !SimSignalUtil.isScreenON(runtime.getContextProxy().context)) || DeviceInfoUtil.isFactoryTestTopActivity(runtime.getContextProxy().context))\r
+                        {\r
+                            //如果 NoTurnOffWifiOnScreenOff 开关 开启,且是屏灭,或者是在工厂测试模式,则原来什么状态就什么状态。\r
+                            if (!IS_HASOPEN && IS_OPEN) {\r
+                                wifiManager.setWifiEnabled(false);\r
+                                IS_OPEN = false;\r
                             }\r
-\r
-                            (new Thread(new Runnable() {\r
-                                public void run() {\r
-                                    SystemClock.sleep(3000L);\r
-                                    StringBuilder sb = LBSHelper.this.handScanResults();\r
-                                    if (sb == null) {\r
-                                        LBSHelper.this.wifiInfoResult = null;\r
-                                    } else {\r
-                                        LBSHelper.this.wifiInfoResult = sb.toString();\r
-                                    }\r
-\r
-                                    LBSHelper.this.mListener.getWifiInfoCallBack(LBSHelper.this.wifiInfoResult);\r
-                                    LBSHelper.this.IS_OPEN = false;\r
-                                    LBSHelper.this.IS_HASOPEN = false;\r
-                                }\r
-                            })).start();\r
-                            return;\r
-                        } else if (LBSHelper.this.mListener != null) {\r
-                            LBSHelper.this.mListener.getWifiInfoCallBack((String) null);\r
+                        }else if (!SimSignalUtil.isScreenON(runtime.getContextProxy().context) && !runtime.isNoTurnOffWifiOnScreenOff()){\r
+                            //如果 NoTurnOffWifiOnScreenOff 开关 关闭,且是屏灭,则关闭wifi省电\r
+                            wifiManager.setWifiEnabled(false);\r
+                            IS_OPEN = false;\r
+                            IS_HASOPEN=false;\r
                         }\r
-                    case WIFI_STATE_DISABLING:\r
-                    case WIFI_STATE_DISABLED:\r
-                    case WIFI_STATE_ENABLING:\r
-                    case WIFI_STATE_UNKNOWN:\r
-                        return;\r
-                    default:\r
+                    }\r
                 }\r
             }\r
         };\r
-\r
-\r
     }\r
 \r
 \r
@@ -207,32 +143,23 @@ public class LBSHelper {
         });\r
     }\r
 \r
-    private void startTimer() {\r
-        if (this.mTimer == null) {\r
-            this.mTimer = new Timer();\r
-        }\r
-\r
-        this.mTimer.schedule(new TimerTask() {\r
-            @Override\r
-            public void run() {\r
-                LBSHelper.this.mHandler.sendEmptyMessage(104);\r
-            }\r
-        }, 10000L);\r
+    private void delayedStopScan() {\r
+        LBSHelper.this.mHandler.sendEmptyMessageDelayed(104,3000L);\r
     }\r
 \r
-    public void unRegisterBroadReceiver() {\r
-        this.context.unregisterReceiver(this.wifiChangedReceiver);\r
-    }\r
+//    public void unRegisterWiFiBroadReceiver() {\r
+//        this.context.unregisterReceiver(this.wifiChangedReceiver);\r
+//    }\r
 \r
     public String getAttchCellInfo(TelephonyManager tm) {\r
         return this.getCellInfo(tm);\r
     }\r
 \r
     public String getCellInfo(TelephonyManager telephonyManager) {\r
-        int var3 = Build.VERSION.SDK_INT;\r
+//        int var3 = Build.VERSION.SDK_INT;\r
         int var2 = 0;\r
         String var4;\r
-        if (var3 > 23) {\r
+        if (Build.VERSION.SDK_INT > 23) {\r
             var4 = telephonyManager.getSimOperator();\r
             if (var4 == null) {\r
                 ICLogger.i("operator == null");\r
@@ -290,9 +217,8 @@ public class LBSHelper {
                              gsmSb.append(mNeighboringCellInfo.getCid());\r
                              gsmSb.append("@");\r
                              gsmSb.append(mNeighboringCellInfo.getRssi() + 110);\r
-                             var3 = var2 + 1;\r
-                             var2 = var3;\r
-                             if (var3 == 5) {\r
+                             var2 ++;\r
+                             if (var2 == 5) {\r
                                  break;\r
                              }\r
                          }\r
@@ -339,18 +265,27 @@ public class LBSHelper {
         } else {\r
             this.wifiManager.setWifiEnabled(true);\r
             this.IS_OPEN = true;\r
-            this.startTimer();\r
+            try {\r
+                Thread.sleep(500);\r
+            } catch (InterruptedException e) {\r
+                e.printStackTrace();\r
+            }\r
         }\r
-    }\r
+        wifiManager.startScan();\r
+        delayedStopScan();\r
 \r
-    public void registerBroadReceiver() {\r
-        IntentFilter var1 = new IntentFilter();\r
-        var1.addAction("android.net.wifi.WIFI_STATE_CHANGED");\r
-        this.context.registerReceiver(this.wifiChangedReceiver, var1);\r
     }\r
 \r
-    public void setOnWiFiInfoListener(LBSHelper.OnWiFiInfoListener var1) {\r
-        this.mListener = var1;\r
+//    public void registerWiFiBroadReceiver() {\r
+//        IntentFilter filter = new IntentFilter();\r
+//        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);//监听wifi是开关变化的状态\r
+//        filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);//监听wifiwifi连接状态广播\r
+//        filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);//监听wifi列表变化(开启一个热点或者关闭一个热点)\r
+//        this.context.registerReceiver(this.wifiChangedReceiver, filter);\r
+//    }\r
+\r
+    public void setOnWiFiInfoListener(LBSHelper.OnWiFiInfoListener wiFiInfoListener) {\r
+        this.mMyWifiListener = wiFiInfoListener;\r
     }\r
 \r
     private class MyPhoneStateListener extends PhoneStateListener {\r
index 0df8f4d..d4d72fd 100644 (file)
@@ -902,17 +902,17 @@ public class protocolAPIHelper {
 \r
             log("work mode "+cmdlist[3]);\r
             int mod=Integer.valueOf(cmdlist[3]);\r
-            int Cycle=15;\r
+            int Cycle=900;\r
             switch(mod){\r
                 case ICLocation.NORMAL_MOD:\r
-                    Cycle=15;\r
+                    Cycle=900;\r
                     break;\r
                 case ICLocation.LOWPOWER_MOD:\r
-                    Cycle=60;\r
+                    Cycle=3600;\r
                     break;\r
                 case ICLocation.EMERGNECY_MOD:\r
                 case ICLocation.REALTIME_MOD:\r
-                    Cycle=1;\r
+                    Cycle=60;\r
                     break;\r
 \r
             }\r
index 3aded22..3b5dff2 100644 (file)
@@ -10,11 +10,12 @@ public class ICLocation {
     public class GPS_LocationPoint{\r
         public double lat;\r
         public double lon;\r
-        public double speed;\r
-        public double heading;\r
+        public float speed;\r
+        public float heading;\r
         public int used_gps_numbs;\r
         public String latStr;\r
         public String lonStr;\r
+        public float hdop;\r
     }\r
     public class LBS_Data{\r
         HashMap<String ,Integer> wifi_aps=null;\r
@@ -98,7 +99,47 @@ public class ICLocation {
         return currentLP;\r
     }\r
 \r
-    public void setLocation(double lat,double lon,double speed,double heading,int userdgpsnumbers){\r
+    public void setHod(float _hot){\r
+        currentLP.hdop=_hot;\r
+    }\r
+\r
+    public float getHdop(){\r
+        return currentLP.hdop;\r
+    }\r
+\r
+    public void setSpeed( float _speed){\r
+        currentLP.speed=_speed;\r
+    }\r
+    public float getSpeed(){\r
+        return currentLP.speed;\r
+    }\r
+\r
+    public void setLocation(double lat,double lon){\r
+        currentLP.lat=lat;\r
+        currentLP.lon=lon;\r
+    }\r
+    public void setLocation(String lat,String lon){\r
+        currentLP.latStr=lat;\r
+        currentLP.lonStr=lon;\r
+    }\r
+\r
+    public  void setHeading(float heding){\r
+        currentLP.heading=heding;\r
+    }\r
+\r
+    public float getheading(){\r
+        return currentLP.heading;\r
+    }\r
+\r
+    public void setUsedStarts(int starts){\r
+        currentLP.used_gps_numbs=starts;\r
+    }\r
+\r
+    public int getUsedStarts(){\r
+        return currentLP.used_gps_numbs;\r
+    }\r
+\r
+    public void setLocation(double lat,double lon,float speed,float heading,int userdgpsnumbers,float hdop){\r
         currentLP.lat=lat;\r
         currentLP.lon=lon;\r
         currentLP.speed=speed;\r
@@ -106,8 +147,9 @@ public class ICLocation {
         currentLP.used_gps_numbs = userdgpsnumbers;\r
         currentLP.latStr="";\r
         currentLP.lonStr="";\r
+        currentLP.hdop=hdop;\r
     }\r
-    public void setLocation(String lat,String lon,double speed,double heading,int userdgpsnumbers){\r
+    public void setLocation(String lat,String lon,float speed,float heading,int userdgpsnumbers,float hdop){\r
         currentLP.lat=0;\r
         currentLP.lon=0;\r
         currentLP.speed=speed;\r
@@ -115,6 +157,7 @@ public class ICLocation {
         currentLP.used_gps_numbs = userdgpsnumbers;\r
         currentLP.latStr=lat;\r
         currentLP.lonStr=lon;\r
+        currentLP.hdop=99.9f;\r
     }\r
 \r
     public void clearLBSdata(){\r
index 7c7e39c..6264941 100644 (file)
@@ -194,13 +194,13 @@ public class KeepAlive extends AbstractConnectionService {
             stringBuilder.append(",,first=");\r
             stringBuilder.append(this.first);\r
             ICLogger.i(stringBuilder.toString());\r
-            if (param1Integer.intValue() > 0) {\r
+            if (param1Integer.intValue() > 1) {\r
               //返回值大于0 证明是网络连接成功,开始重连服务器\r
               if (this.first) {\r
                 this.first = false;\r
                 return;\r
               }\r
-              ICLogger.i("数据网络连接成功,重新连接网络。");\r
+              ICLogger.i("数据网络连接成功,重新连接服务器。");\r
               CoreService.getInstance().ReConnectToServer();\r
             } \r
           }\r
@@ -220,7 +220,7 @@ public class KeepAlive extends AbstractConnectionService {
     connectionError = true;\r
     isConnected = false;\r
     paramRuntime.setServerProtocolConnected(false);\r
-    paramRuntime.getContextProxy().sendBroadcast(isConnected);\r
+    paramRuntime.getContextProxy().sendBroadcast(false);\r
     StringBuilder stringBuilder = new StringBuilder();\r
     stringBuilder.append("onConnectionClose=");\r
     stringBuilder.append(",set KeepAlive isConnected = false");\r
@@ -305,7 +305,7 @@ public class KeepAlive extends AbstractConnectionService {
 //      isConnected = true;\r
       is_heartBeat_send_success=true;\r
 //广播服务器连接成功的消息\r
-      paramRuntime.getContextProxy().sendBroadcast(isConnected);\r
+      paramRuntime.getContextProxy().sendBroadcast(true);\r
       LauncherCtrl.getInstance(this.mContext).setStatusBarIcon("server_connected", STATUS_BAR_STATE_SERVER_CONNECTED_ON);\r
 //      Deliver.triggerSendThread(); //链接上就尝试清除 buffer中的数据\r
       CoreService.getInstance().stopConnectionRetryTimer();\r
index 31b8e55..0fd092c 100644 (file)
@@ -79,6 +79,8 @@ public class CellInfoUtil {
           public void run() {\r
 \r
             if (mRuntime !=null) {\r
+\r
+              //更新lbs信息\r
               CellInfoUtil.mCellInfo = mRuntime.getLbsHelper().getAttchCellInfo(mRuntime.getContextProxy().getTelephonyManager());\r
 \r
               if (mCellInfo != null) {\r
index 5e137de..632ded2 100644 (file)
@@ -5,48 +5,66 @@ package com.enqualcomm.support.utils;
         import android.content.Intent;\r
         import android.content.IntentFilter;\r
         import android.net.ConnectivityManager;\r
+        import android.net.Network;\r
         import android.net.NetworkInfo;\r
         import com.enqualcomm.support.service.KeepAlive;\r
         import rx.Observable;\r
         import rx.subjects.BehaviorSubject;\r
 \r
 public class NetworkObservable {\r
+  static String lastActivType="off";\r
   BroadcastReceiver mNetStateBroadcastReceiver = new BroadcastReceiver() {\r
-    public void onReceive(Context var1, Intent var2) {\r
-      NetworkInfo networkInfo = ((ConnectivityManager)var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();\r
-      if (networkInfo != null && networkInfo.isAvailable()) {\r
+    public void onReceive(Context context, Intent intent) {\r
+      NetworkInfo networkInfo = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();\r
+//      NetworkInfo wifiinfo=((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI);\r
+//      NetworkInfo mobileinfo=((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_MOBILE);\r
+//      ICLogger.i("active network type = "+wifiinfo.getTypeName()+", status="+wifiinfo.getState().name());\r
+//      ICLogger.i("active network type = "+mobileinfo.getTypeName()+", status="+mobileinfo.getState().name());\r
+       if (networkInfo != null && networkInfo.isAvailable()) {\r
+         if (lastActivType!=networkInfo.getTypeName()){\r
+           lastActivType=networkInfo.getTypeName();\r
+           active_network_changed=true;\r
+         }else{\r
+           active_network_changed=false;\r
+         }\r
         StringBuilder var4 = new StringBuilder();\r
-        var4.append("BroadcastReceiver---reConnection++  KeepAlive.isConnected=");\r
+\r
+        var4.append("BroadcastReceiver---网络连接成功  KeepAlive.isConnected=");\r
         var4.append(KeepAlive.isConnected);\r
-        var4.append(",network_is_down=");\r
-        var4.append(NetworkObservable.this.network_is_down);\r
+        var4.append(",active_network_changed=");\r
+        var4.append(active_network_changed);\r
         var4.append(",network_is_from_no_to_yes=");\r
-        var4.append(NetworkObservable.this.network_is_from_no_to_yes);\r
+        var4.append(network_is_from_no_to_yes);\r
+        var4.append(",network_type=").append(networkInfo.getTypeName());\r
         ICLogger.i(var4.toString());\r
-        if (!KeepAlive.isConnected && !NetworkObservable.this.network_is_from_no_to_yes) {\r
-          if (NetworkObservable.this.network_is_down) {\r
-\r
-            NetworkObservable.this.objectPublishSubject.onNext(3);\r
-            NetworkObservable.this.network_is_down = false;\r
+        if (!KeepAlive.isConnected && !network_is_from_no_to_yes) {\r
+          //如果serversocket 未连接成功,且之前网络未断开重连\r
+          if (active_network_changed) {\r
+            //如果之前一次是网络断开,则重连\r
+            objectPublishSubject.onNext(2);\r
           } else {\r
-            NetworkObservable.this.objectPublishSubject.onNext(2);\r
-            NetworkObservable.this.network_is_down = true;\r
+            //如果之前网络正常,则无需重连\r
+            objectPublishSubject.onNext(1);\r
           }\r
-        } else if (NetworkObservable.this.network_is_from_no_to_yes) {\r
-          NetworkObservable.this.objectPublishSubject.onNext(1);\r
+        } else if (network_is_from_no_to_yes) {\r
+          //如果是断网重连,则证明需要重连\r
+          objectPublishSubject.onNext(3);\r
         } else if (KeepAlive.isConnected) {\r
-          NetworkObservable.this.network_is_down = false;\r
+          //如果网络实际连接的,就无需重连\r
+          active_network_changed = false;\r
         }\r
-        NetworkObservable.this.network_is_from_no_to_yes = false;\r
+        //下次在有新状态,无需重连\r
+        network_is_from_no_to_yes = false;\r
       } else {\r
         ICLogger.i("网络断开");\r
-        NetworkObservable.this.network_is_from_no_to_yes = true;\r
-        NetworkObservable.this.objectPublishSubject.onNext(0);\r
+        lastActivType="off";\r
+        network_is_from_no_to_yes = true; //断网了,则下次变化必然是 FromNoToYes,需要重连 所以为 True\r
+        objectPublishSubject.onNext(0); //发送断网消息。\r
       }\r
 \r
     }\r
   };\r
-  private boolean network_is_down = false;\r
+  private boolean active_network_changed = false;\r
   private boolean network_is_from_no_to_yes = true;\r
   BehaviorSubject<Integer> objectPublishSubject = BehaviorSubject.create();\r
 \r
index 4157b41..68d48b3 100644 (file)
@@ -181,9 +181,9 @@ public class SimSignalUtil {
     this.mNetworkType = ((TelephonyManager)this.context.getSystemService(Context.TELEPHONY_SERVICE)).getNetworkType();\r
   }\r
   \r
-  public boolean isScreenON() {\r
+  public static boolean isScreenON(Context context) {\r
       // If you use less than API20:\r
-      PowerManager powerManager = (PowerManager) this.context.getSystemService(POWER_SERVICE);\r
+      PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);\r
       // If the screen is off then the device has been locked\r
 \r
       boolean lisScreenOn;\r
index efadc26..139e467 100644 (file)
@@ -1,2 +1,2 @@
-#Wed Mar 11 02:07:29 CST 2020\r
-VERSION_CODE=373\r
+#Fri Mar 13 10:11:53 CST 2020\r
+VERSION_CODE=374\r