优化timer,把无用的先清除掉。
authorsnickersun <scy@incartech.cn>
Sat, 18 Jan 2020 07:09:35 +0000 (15:09 +0800)
committersnickersun <scy@incartech.cn>
Sat, 18 Jan 2020 07:09:35 +0000 (15:09 +0800)
只保留 1分钟的alarm,3分钟的heartbeat,还有locationalarm.后期还需优化。
另外,优化了重连机制。

app/src/main/java/com/ic/protocol/NMEAListener.java

index 054d4c4..a270ebe 100644 (file)
@@ -1,5 +1,6 @@
 package com.ic.protocol;\r
 \r
+import android.content.Context;\r
 import android.location.Criteria;\r
 import android.location.GpsSatellite;\r
 import android.location.GpsStatus;\r
@@ -57,6 +58,37 @@ public class NMEAListener implements NmeaListener, LocationListener {
   \r
   public void onStatusChanged(String paramString, int paramInt, Bundle paramBundle) {}\r
 \r
+  public boolean gpsColdStart(){\r
+//冷启动\r
+    Bundle bundle = null;\r
+    locationManager.sendExtraCommand("gps", "force_xtra_injection", bundle); //command\r
+    locationManager.sendExtraCommand("gps", "force_time_injection", bundle);\r
+    boolean b1 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundle);\r
+    return b1;\r
+\r
+  }\r
+\r
+  public boolean gpsWormStart(){\r
+\r
+//温启动\r
+    Bundle bundleWarm = new Bundle();\r
+    bundleWarm.putBoolean("ephemeris", true);\r
+    locationManager.sendExtraCommand("gps", "force_xtra_injection", bundleWarm); //command\r
+    locationManager.sendExtraCommand("gps", "force_time_injection", bundleWarm);\r
+    boolean b2 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundleWarm);\r
+\r
+    return b2;\r
+  }\r
+\r
+  public boolean gpsHotStart(){\r
+//热启动\r
+    Bundle bundleHot = new Bundle();\r
+    bundleHot.putBoolean("almanac", true);\r
+    locationManager.sendExtraCommand("gps", "force_xtra_injection", bundleHot); //command\r
+    locationManager.sendExtraCommand("gps", "force_time_injection", bundleHot);\r
+    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
@@ -176,19 +208,20 @@ public class NMEAListener implements NmeaListener, LocationListener {
 \r
         count++;\r
       }\r
-      sb2.append("搜索"+searchCout+"次,搜索到卫星个数(SNR>0):" + numSatelliteList.size()+" \n Max 3 SNRs[ " );\r
+      sb2.append("搜索"+searchCout+"次,搜索到卫星个数:"+maxSatellites+" , (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
-      if (numSatelliteList.size()< 1){\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 (searchCout>SearchTimeout){\r
-      sb2.append(" 搜索"+searchCout+"次,超过"+SearchTimeout+"限制退出GPS定位");\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
@@ -296,7 +329,7 @@ public class NMEAListener implements NmeaListener, LocationListener {
             Logger.i( sb.toString());\r
 \r
             FileOutputUtil.fileOutput(this.runtime.getContextProxy().context,"GPS",sb.toString());\r
-            runtime.getLocationInstance().setLocation(location.getLatitude(),location.getLongitude(),location.getSpeed(),0,status.getMaxSatellites());\r
+            runtime.getLocationInstance().setLocation(latitude,longitude,speed,0,status.getMaxSatellites());\r
           }\r
 \r
         }\r
@@ -306,13 +339,16 @@ public class NMEAListener implements NmeaListener, LocationListener {
 \r
 \r
   public boolean startListen() {\r
+\r
     Criteria criteria = new Criteria();\r
-    criteria.setAccuracy(Criteria.ACCURACY_FINE);\r
-    criteria.setAltitudeRequired(false);\r
-    criteria.setBearingRequired(false);\r
-    criteria.setCostAllowed(true);\r
-    criteria.setPowerRequirement(Criteria.POWER_LOW);\r
+    criteria.setAccuracy(Criteria.ACCURACY_FINE);// 设置为最大精度\r
+    criteria.setAltitudeRequired(false);//不要求海拔信息\r
+    criteria.setBearingRequired(false);// 不要求方位信息\r
+    criteria.setCostAllowed(true);//是否允许付费\r
+    criteria.setPowerRequirement(Criteria.POWER_LOW);// 对电量的要求\r
+\r
     String provider = locationManager.getBestProvider(criteria,true);\r
+\r
     Logger.i("GPS StartListen with Provider "+provider);\r
     this.locationManager.requestLocationUpdates(provider, 0L, 0.0F, this);\r
     this.listening = true;\r