添加GPS窗口
authorsnickersun <scy@incartech.cn>
Mon, 16 Mar 2020 15:38:12 +0000 (23:38 +0800)
committersnickersun <scy@incartech.cn>
Mon, 16 Mar 2020 15:38:12 +0000 (23:38 +0800)
15 files changed:
app/app.iml
app/build.gradle
app/src/main/AndroidManifest.xml
app/src/main/java/com/enqualcomm/support/GPSActivity.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/NMEAListener.java
app/src/main/java/com/enqualcomm/support/SnrHistogramView.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/bean/ICLocation.java
app/src/main/java/com/enqualcomm/support/toolActivity.java
app/src/main/java/com/enqualcomm/support/utils/LocationSnrAdapter.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/utils/SnrEntriy.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/utils/WakeLockUtil.java
app/src/main/res/layout/activity_gps.xml [new file with mode: 0644]
app/src/main/res/layout/item_snr_layout.xml [new file with mode: 0644]
app/src/main/res/values/colors.xml
app/src/main/res/values/styles.xml

index 438d013..bbe6c1d 100644 (file)
     <orderEntry type="library" name="Gradle: __local_aars__:D.\workspace\icsupport\app\libs\LauncherCtrl.jar:unspecified@jar" level="project" />\r
     <orderEntry type="library" name="Gradle: __local_aars__:D.\workspace\icsupport\app\libs\log4j-1.2.17.jar:unspecified@jar" level="project" />\r
     <orderEntry type="library" name="Gradle: __local_aars__:D.\workspace\icsupport\app\libs\okio-2.4.3.jar:unspecified@jar" level="project" />\r
+    <orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.3@jar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.android.support:support-annotations:25.1.0@jar" level="project" />\r
     <orderEntry type="library" name="Gradle: io.reactivex:rxjava:1.1.0@jar" level="project" />\r
+    <orderEntry type="library" name="Gradle: com.android.support:multidex:1.0.2@aar" level="project" />\r
+    <orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout:1.1.3@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.github.ChestnutPlus:TestModules:v1.0.16@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.android.support:appcompat-v7:25.1.0@aar" level="project" />\r
-    <orderEntry type="library" name="Gradle: com.android.support:multidex:1.0.2@aar" level="project" />\r
+    <orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7:25.1.0@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable:25.1.0@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable:25.1.0@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.android.support:support-v4:25.1.0@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.android.support:support-fragment:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" name="Gradle: com.android.support:support-core-ui:25.1.0@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.android.support:support-media-compat:25.1.0@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.android.support:support-core-utils:25.1.0@aar" level="project" />\r
-    <orderEntry type="library" name="Gradle: com.android.support:support-core-ui:25.1.0@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.android.support:support-compat:25.1.0@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: com.kymjs.rxvolley:rxvolley:1.1.3@aar" level="project" />\r
     <orderEntry type="library" name="Gradle: io.reactivex:rxandroid:1.1.0@aar" level="project" />\r
     <orderEntry type="module" module-name="dNSCache" />\r
-    <orderEntry type="module" module-name="dNSCache" />\r
   </component>\r
 </module>
\ No newline at end of file
index 539d7c7..f8900b9 100644 (file)
@@ -13,7 +13,7 @@ android {
     defaultConfig {
         applicationId "com.enqualcomm.support"
         minSdkVersion 19
-        targetSdkVersion 25
+        targetSdkVersion 29
         versionCode currentVersionCode
         versionName "${currentVersionName}"
         multiDexEnabled true
@@ -93,6 +93,9 @@ dependencies {
     implementation 'com.github.ChestnutPlus:TestModules:v1.0.16'
     testCompile 'junit:junit:4.12'
     implementation project(path: ':dNSCache')
+    implementation 'com.android.support:recyclerview-v7:25.1.0'
+
+//    implementation "androidx.recyclerview:recyclerview:1.1.0
 }
 
 def getVersionCode() {
index b1e1d14..3d03389 100644 (file)
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
         <activity android:name=".toolActivity"></activity>
+        <activity android:name=".GPSActivity"></activity>
         <activity android:name=".MainActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/app/src/main/java/com/enqualcomm/support/GPSActivity.java b/app/src/main/java/com/enqualcomm/support/GPSActivity.java
new file mode 100644 (file)
index 0000000..aa974be
--- /dev/null
@@ -0,0 +1,162 @@
+package com.enqualcomm.support;\r
+\r
+import android.graphics.Color;\r
+import android.graphics.Rect;\r
+import android.os.Bundle;\r
+import android.os.Handler;\r
+import android.os.Message;\r
+import android.os.PowerManager;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.support.v7.widget.LinearLayoutManager;\r
+import android.support.v7.widget.RecyclerView;\r
+import android.view.View;\r
+import android.widget.TextView;\r
+\r
+import com.enqualcomm.support.NMEAListener.location_callback;\r
+import com.enqualcomm.support.bean.ICLocation;\r
+import com.enqualcomm.support.utils.LocationSnrAdapter;\r
+import com.enqualcomm.support.utils.SnrEntriy;\r
+import com.enqualcomm.support.utils.WakeLockUtil;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Timer;\r
+import java.util.TimerTask;\r
+\r
+public class GPSActivity extends AppCompatActivity implements location_callback {\r
+\r
+    private RecyclerView mRv;\r
+\r
+    private TextView mFix;\r
+    private TextView mStar;\r
+    private TextView mHoop;\r
+    private TextView mSearchCount;\r
+    private boolean showmessage=false;\r
+    private Timer timer;\r
+    final LocationSnrAdapter adapter = new LocationSnrAdapter(testSnrEntriyDate(null));\r
+//\r
+//    Handler handler=new Handler(new Handler.Callback() {\r
+//        @Override\r
+//        public boolean handleMessage(Message message) {\r
+//\r
+//\r
+//            StringBuilder sb=new StringBuilder();\r
+//            try {\r
+//\r
+//                if (showmessage) {\r
+//                    ICLocation location=CoreService.getInstance().runtime.getLocationInstance();\r
+//                    List<ICLocation.GpsSatellitePriv> gpslist =location.getNumSatelliteList();\r
+//                    adapter.updateLocationValue(testSnrEntriyDate(gpslist));\r
+//                    String fixed=(location.getLocationStat()==ICLocation.LOCATION_STAT.LOCATION_FIXED)?\r
+//                            "Fixed":(location.getLocationStat()==ICLocation.LOCATION_STAT.LOCATION_OPEN)?\r
+//                            "Opened":(location.getLocationStat()==ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT)?\r
+//                            "Timeout":"Closed";\r
+//                    String satlites=new StringBuilder().append(location.getLocation().used_gps_numbs).append("/").append(gpslist!=null?location.getNumSatelliteList().size():0).toString();\r
+//                    String locationTime=location.getLocationTime();\r
+//                    mFix.setText(fixed);\r
+//                    mStar.setText(satlites);\r
+//                    mHoop.setText(String.valueOf(location.getLocation().hdop));\r
+//                }\r
+//\r
+//            }catch(Exception e){\r
+//                e.printStackTrace();\r
+//            }\r
+//\r
+//\r
+//            return false;\r
+//        }\r
+//    });\r
+    @Override\r
+    protected void onCreate(Bundle savedInstanceState) {\r
+        super.onCreate(savedInstanceState);\r
+        setContentView(R.layout.activity_gps);\r
+\r
+        mRv = (RecyclerView)findViewById(R.id.app_list);\r
+\r
+        mFix=(TextView)findViewById(R.id.ic_lc_fix_value);\r
+        mStar =(TextView) findViewById(R.id.ic_lc_star_value);\r
+        mHoop =  (TextView)findViewById(R.id.ic_lc_hoop_value);\r
+        mSearchCount= (TextView)findViewById(R.id.ic_lc_searchCount_value);\r
+        mRv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));\r
+\r
+        mRv.addItemDecoration(new SpacesItemDecoration(10));\r
+        mRv.setAdapter(adapter);\r
+\r
+        mFix.setText("80");\r
+        mStar.setText("280");\r
+        mHoop.setText("180");\r
+    }\r
+\r
+    @Override\r
+    public void on_locating_changed(ICLocation.GPS_locationStatus gps_status) {\r
+\r
+        List<ICLocation.GpsSatellitePriv> gpslist =gps_status.numSatelliteList;\r
+        adapter.updateLocationValue(testSnrEntriyDate(gpslist));\r
+        String fixed=gps_status.locating_status>0?\r
+                "Fixed":"notFixed";\r
+        String satlites=new StringBuilder().append(gps_status.used_gps_numbs).append("/")\r
+                .append(gps_status.satlite_numbss).toString();\r
+        String locationTime=new StringBuilder().append(gps_status.search_time_cost).append("秒").toString();\r
+        mFix.setText(fixed);\r
+        mStar.setText(satlites);\r
+        mHoop.setText(String.valueOf(gps_status.hdop));\r
+        mSearchCount.setText(locationTime);\r
+    }\r
+\r
+    public class SpacesItemDecoration extends RecyclerView.ItemDecoration {\r
+        private int space;\r
+\r
+        public SpacesItemDecoration(int space) {\r
+            this.space = space;\r
+        }\r
+\r
+        @Override\r
+        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {\r
+            outRect.right = space;\r
+        }\r
+    }\r
+\r
+    public ArrayList<SnrEntriy> testSnrEntriyDate(List<ICLocation.GpsSatellitePriv> gpslist) {\r
+        ArrayList<SnrEntriy> entity = new ArrayList<>();\r
+\r
+        if (gpslist!=null) {\r
+            for (int i = 1; i < gpslist.size(); i++) {\r
+\r
+                float snr=gpslist.get(i).getSnr();\r
+                int prn=gpslist.get(i).getPrn();\r
+                SnrEntriy info = new SnrEntriy(snr,prn , (snr>=40?Color.GREEN:((snr>=25&&snr<40)?Color.YELLOW:Color.RED)));\r
+                entity.add(info);\r
+            }\r
+        }\r
+        return entity;\r
+    }\r
+    PowerManager.WakeLock screenOnWakelock=null;\r
+    @Override\r
+    protected  void onResume() {\r
+        super.onResume();\r
+//        TimerTask tmt=new TimerTask() {\r
+//            @Override\r
+//            public void run() {\r
+//                handler.sendEmptyMessage(0);\r
+//            }\r
+//        };\r
+//        timer=new Timer();\r
+//        timer.schedule(tmt,0,2000);\r
+//        showmessage=true;\r
+        NMEAListener.set_callback(this);\r
+        screenOnWakelock = WakeLockUtil.getScreenOnWakeLock(this,GPSActivity.class.getSimpleName());\r
+    }\r
+\r
+    @Override\r
+    protected void onPause() {\r
+        super.onPause();\r
+//        if (timer!=null) {\r
+//            timer.cancel();\r
+//            timer.purge();\r
+//            timer = null;\r
+//        }\r
+        showmessage=false;\r
+        screenOnWakelock.release();\r
+\r
+    }\r
+}\r
index 23b0be6..4adfe4e 100644 (file)
@@ -5,6 +5,7 @@ import android.location.Criteria;
 import android.location.GpsSatellite;\r
 import android.location.GpsStatus;\r
 import android.location.GpsStatus.NmeaListener;\r
+\r
 import android.location.Location;\r
 import android.location.LocationListener;\r
 import android.location.LocationManager;\r
@@ -16,7 +17,7 @@ import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.utils.FileOutputUtil;\r
 import com.enqualcomm.support.utils.ICLogger;\r
 import com.enqualcomm.support.utils.TimeUtil;\r
-\r
+import com.enqualcomm.support.bean.ICLocation.GPS_locationStatus;\r
 import java.text.DecimalFormat;\r
 import java.util.ArrayList;\r
 import java.util.Iterator;\r
@@ -28,24 +29,9 @@ public class NMEAListener implements NmeaListener, LocationListener {
   public boolean isListening(){\r
     return listening;\r
   }\r
-  public class  GpsSatellitePriv {\r
-    int prn;\r
-    float snr;\r
-    GpsSatellitePriv(int _prn, float _snr) {\r
-      prn=_prn;\r
-      snr=_snr;\r
-    }\r
-    public int getPrn() {\r
-      return prn;\r
-    }\r
-    public float getSnr() {\r
-      return snr;\r
-    }\r
-  }\r
+\r
   private LocationManager locationManager;\r
   private String locationInfo;\r
-  private List<GpsSatellitePriv> numSatelliteList = new ArrayList<GpsSatellitePriv>(); // 卫星信号\r
-  private List<GpsSatellitePriv> max3Satellite = new ArrayList<GpsSatellitePriv>(); // 卫星信号\r
 \r
   private double longitude;\r
   private double latitude;\r
@@ -65,6 +51,19 @@ public class NMEAListener implements NmeaListener, LocationListener {
   private static int locationFixedCount=0;\r
 \r
 \r
+  private static location_callback mCallback=null;\r
+  public interface location_callback{\r
+    public void on_locating_changed(GPS_locationStatus gps_status);\r
+  }\r
+  public static void set_callback(location_callback callback){\r
+    mCallback=callback;\r
+  }\r
+\r
+  private GPS_locationStatus gps_status = new GPS_locationStatus();\r
+  public GPS_locationStatus get_gps_status(){\r
+    return gps_status;\r
+  }\r
+\r
 \r
   public void setNoStop(boolean nostop){\r
     noStop=nostop;\r
@@ -92,8 +91,7 @@ public class NMEAListener implements NmeaListener, LocationListener {
     this.locationManager = paramLocationManager;\r
     this.runtime = paramRuntime;\r
   }\r
-  \r
-  public void onLocationChanged(Location paramLocation) {}\r
+\r
   static int satindex=0;\r
   public void onNmeaReceived(long paramLong, String nmeastr) {\r
 //    EqcAlgorithmNative.native_EqcAlgorithmMethod5(paramString);\r
@@ -101,7 +99,14 @@ public class NMEAListener implements NmeaListener, LocationListener {
 \r
     if (Config.LOG_TOFILE) FileOutputUtil.fileOutputRaw(this.runtime.getCacheDir(),"Nmea",nmeastr);\r
 \r
-    if(nmeastr.startsWith("$RD_RSSI"))    searchCout++;\r
+    if(nmeastr.startsWith("$RD_RSSI"))  {\r
+\r
+      searchCout++;\r
+      if (mCallback !=null)\r
+        mCallback.on_locating_changed(get_gps_status());\r
+      gps_status.numSatelliteList.clear();\r
+      gps_status.search_time_cost=searchCout;\r
+    }\r
 \r
 \r
     if (nmeastr.startsWith("$GPGLL,")){\r
@@ -149,12 +154,12 @@ public class NMEAListener implements NmeaListener, LocationListener {
 //      ICLogger.i("GPRMC GPSTime="+utctime+",Lat="+Lat+",Lon="+lon+",fixed="+fixed+",speed="+speed);\r
 //      if (Config.LOG_TOFILE)\r
 //        FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "GPS", "GPRMC GPSTime="+utctime+",Lat="+Lat+",Lon="+lon+",fixed="+fixed+",speed="+speed);\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
+\r
     }else if (nmeastr.startsWith("$GPGSV,")) {\r
 \r
 //    GPGSV编辑\r
@@ -185,11 +190,14 @@ public class NMEAListener implements NmeaListener, LocationListener {
       if (maxPageCount>0 && currentPage==1){\r
         //第一页把数组初始化一遍。\r
         satindex=0;\r
-        numSatelliteList.clear(); //清除 SNR >0的卫星\r
-        max3Satellite.clear(); //清除 最大3个星值\r
+        runtime.getLocationInstance().numSatelliteList.clear(); //清除 SNR >0的卫星\r
+        runtime.getLocationInstance().max3Satellite.clear(); //清除 最大3个星值\r
+\r
+        gps_status.satlite_numbss=SatlitesCount;\r
       }\r
       int satcount=(tmplist.length-4)/4;\r
 //      ICLogger.i("Nmea :"+nmeastr+" "+satcount);\r
+      runtime.getLocationInstance().set_adding_satlite_flag(true);\r
       for (int i=0;i<satcount;i++){\r
         satindex++;\r
         String prn=tmplist[i*4+4];\r
@@ -206,17 +214,20 @@ public class NMEAListener implements NmeaListener, LocationListener {
         float floatsnr=Float.valueOf(snr);\r
         if (floatsnr>0) {\r
           //排序取得最大3个SNR\r
-          get3MaxSnrSatellite(new GpsSatellitePriv(intprn, floatsnr));\r
-          numSatelliteList.add(new GpsSatellitePriv(intprn, floatsnr));\r
+          get3MaxSnrSatellite(new ICLocation.GpsSatellitePriv(intprn, floatsnr));\r
+          runtime.getLocationInstance().numSatelliteList.add(new ICLocation.GpsSatellitePriv(intprn, floatsnr));\r
+          gps_status.numSatelliteList.add(new ICLocation.GpsSatellitePriv(intprn, floatsnr));\r
         }\r
       }\r
+\r
+      runtime.getLocationInstance().set_adding_satlite_flag(false);\r
       if (maxPageCount==currentPage) {\r
         //最后一页,打印搜星情况,并作一些判断。\r
         StringBuilder sb=new StringBuilder();\r
-        sb.append("搜索"+searchCout+"次,搜索到卫星个数" + SatlitesCount+", [SNR>0] ="+numSatelliteList.size());\r
+        sb.append("搜索"+searchCout+"次,搜索到卫星个数" + SatlitesCount+", [SNR>0] ="+ runtime.getLocationInstance().numSatelliteList.size());\r
         sb.append(", Max 5 SNR [");\r
-        for (int i=0;i<max3Satellite.size();i++){\r
-          sb.append(max3Satellite.get(i).getSnr()+",");\r
+        for (int i=0;i< runtime.getLocationInstance().max3Satellite.size();i++){\r
+          sb.append( runtime.getLocationInstance().max3Satellite.get(i).getSnr()+",");\r
         }\r
         sb.append("]");\r
         if (Config.LOG_TOFILE)\r
@@ -224,7 +235,7 @@ public class NMEAListener implements NmeaListener, LocationListener {
         ICLogger.i( sb.toString());\r
 \r
         // 卫星总数小于2 ,或者 snr小于20\r
-        if (numSatelliteList.size()< 3 && (max3Satellite.size()>0?(max3Satellite.get(0).getSnr()<20?true:false) : true)){\r
+        if ( runtime.getLocationInstance().numSatelliteList.size()< 3 && ( runtime.getLocationInstance().max3Satellite.size()>0?( runtime.getLocationInstance().max3Satellite.get(0).getSnr()<20?true:false) : true)){\r
           noSignalCount++;\r
         }\r
 \r
@@ -248,7 +259,6 @@ public class NMEAListener implements NmeaListener, LocationListener {
         if (Config.LOG_TOFILE)\r
           FileOutputUtil.fileOutput(this.runtime.getCacheDir(),"GPS",sb2.toString());\r
 \r
-\r
       }\r
     }else if (nmeastr.startsWith("$GPGGA,")) {\r
 \r
@@ -279,6 +289,8 @@ public class NMEAListener implements NmeaListener, LocationListener {
       String fixed=tmplist[6];\r
       String usedStarts=tmplist[7];\r
       String hdop=tmplist[8];\r
+\r
+\r
       if ( (fixed.trim().equals("1"))||(fixed.trim().equals("2"))||(fixed.trim().equals("6"))){\r
 \r
 \r
@@ -331,8 +343,13 @@ public class NMEAListener implements NmeaListener, LocationListener {
               stopListen();\r
             }\r
           }\r
-\r
+        gps_status.locating_status=1; //fixed\r
+      }else{\r
+        gps_status.locating_status=0; //notfixed\r
       }\r
+      gps_status.hdop=Float.valueOf(hdop.trim());\r
+      gps_status.used_gps_numbs=Integer.valueOf(usedStarts.trim());\r
+\r
 \r
     }else if (nmeastr.startsWith("$GPGSA,")) {\r
 \r
@@ -373,7 +390,12 @@ public class NMEAListener implements NmeaListener, LocationListener {
   public void onProviderDisabled(String paramString) {}\r
   \r
   public void onProviderEnabled(String paramString) {}\r
-  \r
+\r
+  @Override\r
+  public void onLocationChanged(Location location) {\r
+\r
+  }\r
+\r
   public void onStatusChanged(String paramString, int paramInt, Bundle paramBundle) {}\r
 \r
   public boolean gpsColdStart(){\r
@@ -440,27 +462,27 @@ public class NMEAListener implements NmeaListener, LocationListener {
       return true;\r
     }\r
   });\r
-  private void get3MaxSnrSatellite(GpsSatellitePriv gst){\r
+  private void get3MaxSnrSatellite(ICLocation.GpsSatellitePriv gst){\r
 \r
     float snr = gst.getSnr();\r
-    for (int k=0;k<max3Satellite.size();k++) {\r
-      if( max3Satellite.get(k).getPrn()==gst.getPrn())\r
-        max3Satellite.remove(k);\r
+    for (int k=0;k< runtime.getLocationInstance().max3Satellite.size();k++) {\r
+      if(  runtime.getLocationInstance().max3Satellite.get(k).getPrn()==gst.getPrn())\r
+        runtime.getLocationInstance().max3Satellite.remove(k);\r
     }\r
-    max3Satellite.add(gst);//先添加进来。\r
+    runtime.getLocationInstance().max3Satellite.add(gst);//先添加进来。\r
 \r
     //从大到小排序\r
-    for(int i=0;i<max3Satellite.size();i++) {\r
-      for (int j=i;j<max3Satellite.size();j++) {\r
-        if (max3Satellite.get(i).getSnr() < max3Satellite.get(j).getSnr()) {\r
-          GpsSatellitePriv ts = max3Satellite.get(j);\r
-          max3Satellite.remove(j);\r
-          max3Satellite.add(i, ts);//大的放前面\r
+    for(int i=0;i< runtime.getLocationInstance().max3Satellite.size();i++) {\r
+      for (int j=i;j< runtime.getLocationInstance().max3Satellite.size();j++) {\r
+        if ( runtime.getLocationInstance().max3Satellite.get(i).getSnr() <  runtime.getLocationInstance().max3Satellite.get(j).getSnr()) {\r
+          ICLocation.GpsSatellitePriv ts =  runtime.getLocationInstance().max3Satellite.get(j);\r
+          runtime.getLocationInstance().max3Satellite.remove(j);\r
+          runtime.getLocationInstance().max3Satellite.add(i, ts);//大的放前面\r
         }\r
       }\r
     }\r
-    if (max3Satellite.size()>5){ //超过三个,谁小就删掉\r
-      max3Satellite.remove(5);\r
+    if ( runtime.getLocationInstance().max3Satellite.size()>5){ //超过三个,谁小就删掉\r
+      runtime.getLocationInstance().max3Satellite.remove(5);\r
     }\r
 \r
   }\r
diff --git a/app/src/main/java/com/enqualcomm/support/SnrHistogramView.java b/app/src/main/java/com/enqualcomm/support/SnrHistogramView.java
new file mode 100644 (file)
index 0000000..bb4eda0
--- /dev/null
@@ -0,0 +1,120 @@
+package com.enqualcomm.support;\r
+\r
+import android.content.Context;\r
+import android.graphics.Canvas;\r
+import android.graphics.Color;\r
+import android.graphics.Paint;\r
+import android.support.annotation.Nullable;\r
+import android.util.AttributeSet;\r
+import android.util.TypedValue;\r
+import android.view.View;\r
+\r
+\r
+public class SnrHistogramView extends View {\r
+\r
+\r
+    private int mWidth = 0;\r
+    private int mHeight = 0;\r
+\r
+    private Paint mPaint;\r
+    private Paint mTextPaint;\r
+\r
+    private String mSnrValue = "80";\r
+    private String mSnrNmber = "60";\r
+\r
+    private float mBL=1f;\r
+\r
+    public SnrHistogramView(Context context) {\r
+        this(context, null);\r
+    }\r
+\r
+    public SnrHistogramView(Context context, @Nullable AttributeSet attrs) {\r
+        this(context, attrs, 0);\r
+    }\r
+\r
+    public SnrHistogramView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {\r
+        super(context, attrs, defStyleAttr);\r
+        mPaint = new Paint();\r
+        mTextPaint = new Paint();\r
+\r
+        mPaint.setAntiAlias(true);\r
+        mPaint.setDither(true);\r
+        int mBgColor = Color.GREEN;\r
+        mPaint.setColor(mBgColor);\r
+        mPaint.setStyle(Paint.Style.FILL);\r
+\r
+        mTextPaint.setAntiAlias(true);\r
+        mTextPaint.setDither(true);\r
+        mTextPaint.setColor(Color.WHITE);\r
+        mTextPaint.setStyle(Paint.Style.FILL);\r
+        mTextPaint.setTextSize(spToPx(24));\r
+    }\r
+\r
+    @Override\r
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\r
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\r
+\r
+\r
+        int widthSize = MeasureSpec.getSize(widthMeasureSpec);\r
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);\r
+        int heightSize = MeasureSpec.getSize(heightMeasureSpec);\r
+        int heightMode = MeasureSpec.getMode(heightMeasureSpec);\r
+\r
+\r
+        if (widthMode == MeasureSpec.AT_MOST\r
+                || widthMode == MeasureSpec.UNSPECIFIED\r
+                || heightMeasureSpec == MeasureSpec.AT_MOST\r
+                || heightMeasureSpec == MeasureSpec.UNSPECIFIED) {\r
+            //宽度高度至少有一个确定的值,不能同时为wrap_content\r
+            return;\r
+        } else { //至少有一个为确定值,要获取其中的最小值\r
+            if (widthMode == MeasureSpec.EXACTLY) {\r
+                mWidth = widthSize;\r
+            }\r
+\r
+            if (heightMode == MeasureSpec.EXACTLY) {\r
+                mHeight = heightSize;\r
+            }\r
+        }\r
+    }\r
+\r
+\r
+    @Override\r
+    protected void onDraw(Canvas canvas) {\r
+        super.onDraw(canvas);\r
+\r
+        float[] snrNmber = measureTextWidth(mSnrNmber, mTextPaint);\r
+        float[] snrValue = measureTextWidth(mSnrValue, mTextPaint);\r
+\r
+        float hv = getHistogramHeight(snrValue[1], snrNmber[1], mBL);\r
+\r
+        canvas.drawText(mSnrNmber, (mWidth - snrNmber[0]) / 2, mHeight, mTextPaint);\r
+        canvas.drawText(mSnrValue, (mWidth - snrValue[0]) / 2, mHeight - snrNmber[1] - hv, mTextPaint);\r
+\r
+        canvas.drawRect(0, mHeight - (hv + snrNmber[1] - 2), mWidth, mHeight - snrNmber[1], mPaint);\r
+    }\r
+\r
+    private float getHistogramHeight(float vh, float nh, float bl) {\r
+        return (mHeight - vh - nh) * bl;\r
+    }\r
+\r
+    private float[] measureTextWidth(String mText, Paint textPaint) {\r
+        Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();\r
+        float height1 = fontMetrics.bottom - fontMetrics.top;\r
+        float strWidth = textPaint.measureText(mText);\r
+        return new float[]{strWidth, height1};\r
+    }\r
+\r
+    private float spToPx(float sp) {\r
+        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, getResources().getDisplayMetrics());\r
+    }\r
+\r
+    public void updateValue(float value,int number,int bgColor){\r
+        mPaint.setColor(bgColor);\r
+        mSnrNmber = String.valueOf(number);\r
+        mSnrValue =String.valueOf((int)value);\r
+        mBL=value*0.025F;\r
+\r
+        invalidate();\r
+    }\r
+}\r
index d707df6..36c228c 100644 (file)
@@ -1,9 +1,40 @@
 package com.enqualcomm.support.bean;\r
 \r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
+import java.util.List;\r
 \r
 public class ICLocation {\r
 \r
+    public static class  GpsSatellitePriv {\r
+        int prn;\r
+        float snr;\r
+        public GpsSatellitePriv(int _prn, float _snr) {\r
+            prn=_prn;\r
+            snr=_snr;\r
+        }\r
+        public int getPrn() {\r
+            return prn;\r
+        }\r
+        public float getSnr() {\r
+            return snr;\r
+        }\r
+    }\r
+    public List<GpsSatellitePriv> numSatelliteList = new ArrayList<GpsSatellitePriv>(); // 卫星信号\r
+    public List<GpsSatellitePriv> max3Satellite = new ArrayList<GpsSatellitePriv>(); // 卫星信号\r
+    private static boolean adding_satlite_flag=false;\r
+    public void set_adding_satlite_flag(boolean flag){\r
+        adding_satlite_flag=flag;\r
+    }\r
+\r
+    public List<GpsSatellitePriv> getNumSatelliteList(){\r
+        if (adding_satlite_flag)\r
+            return null;\r
+        return numSatelliteList;\r
+    }\r
+\r
+\r
+\r
     private LOCATION_STAT currentStat;\r
     private GPS_LocationPoint currentLP=null;\r
     private LBS_Data currentLBS=null;\r
@@ -17,6 +48,16 @@ public class ICLocation {
         public String lonStr;\r
         public float hdop;\r
     }\r
+\r
+\r
+    public static class GPS_locationStatus{\r
+        public List<GpsSatellitePriv> numSatelliteList = new ArrayList<GpsSatellitePriv>(); // 卫星信号\r
+        public int used_gps_numbs;\r
+        public float hdop;\r
+        public int satlite_numbss;\r
+        public int search_time_cost;\r
+        public int locating_status;\r
+    }\r
     public class LBS_Data{\r
         HashMap<String ,Integer> wifi_aps=null;\r
         HashMap<String , Integer> gsm_stations=null;\r
index 9e3afac..e8e7979 100644 (file)
@@ -1,5 +1,6 @@
 package com.enqualcomm.support;\r
 \r
+import android.content.ComponentName;\r
 import android.content.Intent;\r
 import android.support.v7.app.AppCompatActivity;\r
 import android.os.Bundle;\r
@@ -9,6 +10,8 @@ import android.widget.Button;
 import com.enqualcomm.support.utils.SimSignalUtil;\r
 import com.enqualcomm.support.utils.Util;\r
 \r
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;\r
+\r
 public class toolActivity extends AppCompatActivity {\r
 \r
     @Override\r
@@ -64,10 +67,11 @@ public class toolActivity extends AppCompatActivity {
             @Override\r
             public void onClick(View view) {\r
 \r
-\r
-\r
-                Util.ShowToast(CoreService.getInstance().runtime,"Reload SimCard!");\r
-\r
+                Intent intent=new Intent();\r
+                ComponentName var3 = new ComponentName("com.enqualcomm.support", "com.enqualcomm.support.GPSActivity");\r
+                intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
+                intent.setComponent(var3);\r
+                startActivity(intent);\r
             }\r
         });\r
 \r
diff --git a/app/src/main/java/com/enqualcomm/support/utils/LocationSnrAdapter.java b/app/src/main/java/com/enqualcomm/support/utils/LocationSnrAdapter.java
new file mode 100644 (file)
index 0000000..7942e50
--- /dev/null
@@ -0,0 +1,61 @@
+package com.enqualcomm.support.utils;\r
+\r
+import android.support.annotation.NonNull;\r
+import android.support.v7.widget.RecyclerView;\r
+import android.view.LayoutInflater;\r
+import android.view.View;\r
+import android.view.ViewGroup;\r
+\r
+import com.enqualcomm.support.R;\r
+import com.enqualcomm.support.SnrHistogramView;\r
+\r
+import java.util.ArrayList;\r
+\r
+public class LocationSnrAdapter extends RecyclerView.Adapter<LocationSnrAdapter.SnrHolder> {\r
+\r
+\r
+    private ArrayList<SnrEntriy> mSnrList = new ArrayList<>();\r
+\r
+    public LocationSnrAdapter(ArrayList<SnrEntriy> mSnrList) {\r
+        this.mSnrList = mSnrList;\r
+    }\r
+\r
+    public void updateLocationValue(ArrayList<SnrEntriy> snrEntriys){\r
+        mSnrList.clear();\r
+        mSnrList.addAll(snrEntriys);\r
+        notifyDataSetChanged();\r
+    }\r
+\r
+    @NonNull\r
+    @Override\r
+    public SnrHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {\r
+        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_snr_layout, parent, false);\r
+        return new SnrHolder(view);\r
+    }\r
+\r
+    @Override\r
+    public void onBindViewHolder(@NonNull SnrHolder holder, int position) {\r
+        holder.updateSnrValue(mSnrList.get(position));\r
+    }\r
+\r
+    @Override\r
+    public int getItemCount() {\r
+        return mSnrList.size();\r
+    }\r
+\r
+    static class SnrHolder extends RecyclerView.ViewHolder {\r
+\r
+        private SnrHistogramView snrView;\r
+\r
+        public SnrHolder(@NonNull View itemView) {\r
+            super(itemView);\r
+            snrView = (SnrHistogramView)itemView.findViewById(R.id.item_snr_view);\r
+        }\r
+\r
+\r
+        public void updateSnrValue(SnrEntriy entriy){\r
+            snrView.updateValue(entriy.getSnrValue(),entriy.getSnrNumber(),entriy.getSnrBg());\r
+        }\r
+\r
+    }\r
+}\r
diff --git a/app/src/main/java/com/enqualcomm/support/utils/SnrEntriy.java b/app/src/main/java/com/enqualcomm/support/utils/SnrEntriy.java
new file mode 100644 (file)
index 0000000..2dc1775
--- /dev/null
@@ -0,0 +1,40 @@
+package com.enqualcomm.support.utils;\r
+\r
+public class SnrEntriy {\r
+    private float snrValue;\r
+    private int snrNumber;\r
+    private int snrBg;\r
+\r
+    public SnrEntriy() {\r
+    }\r
+\r
+    public SnrEntriy(float snrValue, int snrNumber, int snrBg) {\r
+        this.snrNumber = snrNumber;\r
+        this.snrValue = snrValue;\r
+        this.snrBg = snrBg;\r
+    }\r
+\r
+    public float getSnrValue() {\r
+        return snrValue;\r
+    }\r
+\r
+    public void setSnrValue(int snrValue) {\r
+        this.snrValue = snrValue;\r
+    }\r
+\r
+    public int getSnrNumber() {\r
+        return snrNumber;\r
+    }\r
+\r
+    public void setSnrNumber(int snrNumber) {\r
+        this.snrNumber = snrNumber;\r
+    }\r
+\r
+    public int getSnrBg() {\r
+        return snrBg;\r
+    }\r
+\r
+    public void setSnrBg(int snrBg) {\r
+        this.snrBg = snrBg;\r
+    }\r
+}\r
index a9b08b3..9db2654 100644 (file)
@@ -7,9 +7,9 @@ import java.util.Objects;
 \r
 \r
 public class WakeLockUtil {\r
-  public static PowerManager.WakeLock getWakeLock(Context context, String tag) {\r
-    PowerManager.WakeLock wakeLock = ((PowerManager)(context.getSystemService(Context.POWER_SERVICE))).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, tag);\r
-    wakeLock.acquire(60000L);\r
+  public static PowerManager.WakeLock getScreenOnWakeLock(Context context, String tag) {\r
+    PowerManager.WakeLock wakeLock = ((PowerManager)(context.getSystemService(Context.POWER_SERVICE))).newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag);\r
+    wakeLock.acquire(900000L);\r
     return wakeLock;\r
   }\r
 }\r
diff --git a/app/src/main/res/layout/activity_gps.xml b/app/src/main/res/layout/activity_gps.xml
new file mode 100644 (file)
index 0000000..80caf4b
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+    xmlns:app="http://schemas.android.com/apk/res-auto"\r
+    xmlns:tools="http://schemas.android.com/tools"\r
+    android:layout_width="match_parent"\r
+    android:layout_height="match_parent"\r
+    tools:context=".GPSActivity"\r
+    android:background="@color/colorIcBg">\r
+\r
+    <TextView\r
+        android:id="@+id/ic_lc_fix_name"\r
+        style="@style/IcTextStyle"\r
+        android:text="GPS状态:"\r
+        android:textSize="24sp" />\r
+\r
+    <TextView\r
+        android:id="@+id/ic_lc_fix_value"\r
+        style="@style/IcTextStyle"\r
+        android:layout_marginStart="10dp"\r
+        android:layout_toEndOf="@id/ic_lc_fix_name"\r
+        android:textSize="24sp" />\r
+\r
+    <TextView\r
+        android:id="@+id/ic_lc_star_name"\r
+        style="@style/IcTextStyle"\r
+        android:layout_below="@id/ic_lc_fix_name"\r
+        android:text="星数:"\r
+        android:textSize="24sp" />\r
+\r
+    <TextView\r
+        android:id="@+id/ic_lc_star_value"\r
+        style="@style/IcTextStyle"\r
+        android:layout_below="@id/ic_lc_fix_name"\r
+        android:layout_marginStart="10dp"\r
+        android:layout_toEndOf="@id/ic_lc_star_name"\r
+        android:textSize="24sp" />\r
+\r
+    <TextView\r
+        android:id="@+id/ic_lc_hoop_name"\r
+        style="@style/IcTextStyle"\r
+        android:layout_below="@id/ic_lc_star_name"\r
+        android:text="HDOP:"\r
+        android:textSize="24sp" />\r
+\r
+    <TextView\r
+        android:id="@+id/ic_lc_hoop_value"\r
+        style="@style/IcTextStyle"\r
+        android:layout_below="@id/ic_lc_star_name"\r
+        android:layout_marginStart="10dp"\r
+        android:layout_toEndOf="@id/ic_lc_hoop_name"\r
+        android:textSize="24sp" />\r
+\r
+\r
+\r
+    <TextView\r
+        android:id="@+id/ic_lc_searchCount"\r
+        style="@style/IcTextStyle"\r
+        android:layout_width="wrap_content"\r
+        android:layout_height="wrap_content"\r
+        android:layout_below="@id/ic_lc_hoop_name"\r
+        android:text="扫描时间:"\r
+        android:textSize="24sp" />\r
+\r
+    <TextView\r
+        android:id="@+id/ic_lc_searchCount_value"\r
+        style="@style/IcTextStyle"\r
+        android:layout_width="wrap_content"\r
+        android:layout_height="wrap_content"\r
+        android:layout_below="@id/ic_lc_hoop_name"\r
+        android:layout_marginStart="10dp"\r
+        android:layout_toEndOf="@id/ic_lc_searchCount"\r
+        android:textSize="24sp" />\r
+    <android.support.v7.widget.RecyclerView\r
+        android:id="@+id/app_list"\r
+        android:layout_below="@id/ic_lc_searchCount"\r
+        android:layout_width="match_parent"\r
+        android:layout_height="match_parent"/>\r
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_snr_layout.xml b/app/src/main/res/layout/item_snr_layout.xml
new file mode 100644 (file)
index 0000000..ba3b6a6
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<com.enqualcomm.support.SnrHistogramView xmlns:android="http://schemas.android.com/apk/res/android"\r
+    android:id="@+id/item_snr_view"\r
+    android:layout_width="45dp"\r
+    android:layout_height="match_parent"/>
\ No newline at end of file
index 3ab3e9c..b9e0fd3 100644 (file)
@@ -3,4 +3,7 @@
     <color name="colorPrimary">#3F51B5</color>
     <color name="colorPrimaryDark">#303F9F</color>
     <color name="colorAccent">#FF4081</color>
+
+    <color name="colorIcBg">#000000</color>
+    <color name="colorIcTextView">#FFFFFF</color>
 </resources>
index 4d1c78e..6f092f7 100644 (file)
 
 </style>
 
-
+    <style name="IcTextStyle">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/colorIcTextView</item>
+        <item name="android:textSize">32sp</item>
+    </style>
 </resources>