diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_india.xml b/app/src/main/res/drawable/ic_india.xml
new file mode 100644
index 0000000..9232da0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_india.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_india.xml b/app/src/main/res/drawable/ic_india.xml
new file mode 100644
index 0000000..9232da0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_india.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_japen.xml b/app/src/main/res/drawable/ic_japen.xml
new file mode 100644
index 0000000..fdf3592
--- /dev/null
+++ b/app/src/main/res/drawable/ic_japen.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_india.xml b/app/src/main/res/drawable/ic_india.xml
new file mode 100644
index 0000000..9232da0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_india.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_japen.xml b/app/src/main/res/drawable/ic_japen.xml
new file mode 100644
index 0000000..fdf3592
--- /dev/null
+++ b/app/src/main/res/drawable/ic_japen.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml
new file mode 100644
index 0000000..51162c7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_minus.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_india.xml b/app/src/main/res/drawable/ic_india.xml
new file mode 100644
index 0000000..9232da0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_india.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_japen.xml b/app/src/main/res/drawable/ic_japen.xml
new file mode 100644
index 0000000..fdf3592
--- /dev/null
+++ b/app/src/main/res/drawable/ic_japen.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml
new file mode 100644
index 0000000..51162c7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_minus.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_red.xml b/app/src/main/res/drawable/ic_right_red.xml
new file mode 100644
index 0000000..4922bf3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_red.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_india.xml b/app/src/main/res/drawable/ic_india.xml
new file mode 100644
index 0000000..9232da0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_india.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_japen.xml b/app/src/main/res/drawable/ic_japen.xml
new file mode 100644
index 0000000..fdf3592
--- /dev/null
+++ b/app/src/main/res/drawable/ic_japen.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml
new file mode 100644
index 0000000..51162c7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_minus.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_red.xml b/app/src/main/res/drawable/ic_right_red.xml
new file mode 100644
index 0000000..4922bf3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_red.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_russia.xml b/app/src/main/res/drawable/ic_russia.xml
new file mode 100644
index 0000000..0741698
--- /dev/null
+++ b/app/src/main/res/drawable/ic_russia.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_india.xml b/app/src/main/res/drawable/ic_india.xml
new file mode 100644
index 0000000..9232da0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_india.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_japen.xml b/app/src/main/res/drawable/ic_japen.xml
new file mode 100644
index 0000000..fdf3592
--- /dev/null
+++ b/app/src/main/res/drawable/ic_japen.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml
new file mode 100644
index 0000000..51162c7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_minus.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_red.xml b/app/src/main/res/drawable/ic_right_red.xml
new file mode 100644
index 0000000..4922bf3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_red.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_russia.xml b/app/src/main/res/drawable/ic_russia.xml
new file mode 100644
index 0000000..0741698
--- /dev/null
+++ b/app/src/main/res/drawable/ic_russia.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_satellite.xml b/app/src/main/res/drawable/ic_satellite.xml
new file mode 100644
index 0000000..ddbfd2f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_satellite.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_india.xml b/app/src/main/res/drawable/ic_india.xml
new file mode 100644
index 0000000..9232da0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_india.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_japen.xml b/app/src/main/res/drawable/ic_japen.xml
new file mode 100644
index 0000000..fdf3592
--- /dev/null
+++ b/app/src/main/res/drawable/ic_japen.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml
new file mode 100644
index 0000000..51162c7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_minus.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_red.xml b/app/src/main/res/drawable/ic_right_red.xml
new file mode 100644
index 0000000..4922bf3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_red.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_russia.xml b/app/src/main/res/drawable/ic_russia.xml
new file mode 100644
index 0000000..0741698
--- /dev/null
+++ b/app/src/main/res/drawable/ic_russia.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_satellite.xml b/app/src/main/res/drawable/ic_satellite.xml
new file mode 100644
index 0000000..ddbfd2f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_satellite.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_signal.xml b/app/src/main/res/drawable/ic_signal.xml
new file mode 100644
index 0000000..674c2b9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_signal.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_india.xml b/app/src/main/res/drawable/ic_india.xml
new file mode 100644
index 0000000..9232da0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_india.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_japen.xml b/app/src/main/res/drawable/ic_japen.xml
new file mode 100644
index 0000000..fdf3592
--- /dev/null
+++ b/app/src/main/res/drawable/ic_japen.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml
new file mode 100644
index 0000000..51162c7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_minus.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_red.xml b/app/src/main/res/drawable/ic_right_red.xml
new file mode 100644
index 0000000..4922bf3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_red.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_russia.xml b/app/src/main/res/drawable/ic_russia.xml
new file mode 100644
index 0000000..0741698
--- /dev/null
+++ b/app/src/main/res/drawable/ic_russia.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_satellite.xml b/app/src/main/res/drawable/ic_satellite.xml
new file mode 100644
index 0000000..ddbfd2f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_satellite.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_signal.xml b/app/src/main/res/drawable/ic_signal.xml
new file mode 100644
index 0000000..674c2b9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_signal.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_un_use.xml b/app/src/main/res/drawable/ic_un_use.xml
new file mode 100644
index 0000000..d4f052c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_un_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService()!! }
+ private val satelliteTypeMap = mapOf(
+ 0 to "UNKNOWN",
+ 1 to "GPS",
+ 3 to "GLONASS",
+ 4 to "QZSS",
+ 5 to "BDS",
+ 6 to "GALILEO",
+ 7 to "IRNSS",
+ )
+ private val satelliteCollection = ArrayList()
+ private lateinit var satelliteAdapter: SatelliteRecyclerAdapter
+ private val locationTool by lazy { LocationTool(this) }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ val params = window.attributes
+ params.width = (getScreenWidth() * 0.965).roundToInt()
+ params.height = (getScreenHeight() * 0.775).roundToInt()
+ window.attributes = params
+
+ if (ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_FINE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(
+ this, Manifest.permission.ACCESS_COARSE_LOCATION
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ "缺少定位权限".show(this)
+ return
+ }
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER, 3000, 0f, this
+ )
+ locationManager.registerGnssStatusCallback(gnssStatusListener, null)
+ satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection)
+ binding.recyclerView.adapter = satelliteAdapter
+ binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(1, Color.WHITE))
+
+ //高德定位
+ locationTool.getCurrentLocation(false, object : OnGetLocationListener {
+ override fun onSuccess(location: AMapLocation) {
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ override fun onError() {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ })
+ }
+
+ override fun onLocationChanged(location: Location) {
+ //转为度分秒
+ val lng = location.longitude.toDegree()
+ val lat = location.latitude.toDegree()
+
+ binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m"
+ }
+
+ private val gnssStatusListener = object : GnssStatus.Callback() {
+ override fun onSatelliteStatusChanged(status: GnssStatus) {
+ satelliteCollection.clear()
+ for (i in 0 until status.satelliteCount) {
+ //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值
+ val constellationType = status.getConstellationType(i)
+ val satellite = Satellite().apply {
+ svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}"
+ signal = status.getCn0DbHz(i).toInt() //获取卫星的信号
+ elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角
+ azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角
+ type = constellationType // 获取卫星的类型
+ isUsedInFix = status.usedInFix(i)
+ }
+ if (satellite.signal != 0) {
+ satelliteCollection.add(satellite)
+ }
+ }
+ Log.d(kTag, satelliteCollection.toJson())
+ satelliteAdapter.notifyDataSetChanged()
+ }
+ }
+
+ override fun initViewBinding(): ActivitySatelliteStatusBinding {
+ return ActivitySatelliteStatusBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
+ override fun onLeftClick() {
+
+ }
+
+ override fun onRightClick() {
+ finish()
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.unregisterGnssStatusCallback(gnssStatusListener)
+ locationManager.removeUpdates(this)
+ Log.d(kTag, "onDestroy: 停止卫星信号监听")
+ locationTool.stopLocation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_high.xml b/app/src/main/res/drawable/bg_progress_bar_high.xml
new file mode 100644
index 0000000..172ce11
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_low.xml b/app/src/main/res/drawable/bg_progress_bar_low.xml
new file mode 100644
index 0000000..ec489c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_high.xml b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
new file mode 100644
index 0000000..c9347e4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_high.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_bar_middle_low.xml b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
new file mode 100644
index 0000000..1411f75
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_bar_middle_low.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_azimuth.xml b/app/src/main/res/drawable/ic_azimuth.xml
new file mode 100644
index 0000000..2e63c1c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_azimuth.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_china.xml b/app/src/main/res/drawable/ic_china.xml
new file mode 100644
index 0000000..99da015
--- /dev/null
+++ b/app/src/main/res/drawable/ic_china.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white.xml b/app/src/main/res/drawable/ic_close_white.xml
new file mode 100644
index 0000000..8701f1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_elevation.xml b/app/src/main/res/drawable/ic_elevation.xml
new file mode 100644
index 0000000..a62083d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_elevation.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_eu.xml b/app/src/main/res/drawable/ic_eu.xml
new file mode 100644
index 0000000..8e1b24b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eu.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_in_use.xml b/app/src/main/res/drawable/ic_in_use.xml
new file mode 100644
index 0000000..b47e456
--- /dev/null
+++ b/app/src/main/res/drawable/ic_in_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_india.xml b/app/src/main/res/drawable/ic_india.xml
new file mode 100644
index 0000000..9232da0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_india.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_japen.xml b/app/src/main/res/drawable/ic_japen.xml
new file mode 100644
index 0000000..fdf3592
--- /dev/null
+++ b/app/src/main/res/drawable/ic_japen.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_minus.xml b/app/src/main/res/drawable/ic_minus.xml
new file mode 100644
index 0000000..51162c7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_minus.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_red.xml b/app/src/main/res/drawable/ic_right_red.xml
new file mode 100644
index 0000000..4922bf3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_red.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_russia.xml b/app/src/main/res/drawable/ic_russia.xml
new file mode 100644
index 0000000..0741698
--- /dev/null
+++ b/app/src/main/res/drawable/ic_russia.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_satellite.xml b/app/src/main/res/drawable/ic_satellite.xml
new file mode 100644
index 0000000..ddbfd2f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_satellite.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_signal.xml b/app/src/main/res/drawable/ic_signal.xml
new file mode 100644
index 0000000..674c2b9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_signal.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_un_use.xml b/app/src/main/res/drawable/ic_un_use.xml
new file mode 100644
index 0000000..d4f052c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_un_use.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_unknown.xml b/app/src/main/res/drawable/ic_unknown.xml
new file mode 100644
index 0000000..86caabf
--- /dev/null
+++ b/app/src/main/res/drawable/ic_unknown.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index fb7f4a8..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index c004770..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index b007d28..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
deleted file mode 100644
index 4515aa3..0000000
--- a/.idea/kotlinc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 796ac45..04aa616 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,7 +9,7 @@
defaultConfig {
applicationId "com.casic.common.detector.gd"
- minSdkVersion 23
+ minSdkVersion 26
targetSdkVersion 33
versionCode 5092
versionName "5.0.9.2"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 30d92f9..2f152d8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
android:name=".view.RtkConfigActivity"
android:theme="@style/Theme.ActivityDialogStyle" />
+
+) : RecyclerView.Adapter() {
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ return ViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.item_satellite_rv_l, parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val satellite = dataRows[position]
+
+ var image = R.drawable.ic_unknown
+ when (satellite.type) {
+ 1 -> image = R.drawable.ic_usa
+ 3 -> image = R.drawable.ic_russia
+ 4 -> image = R.drawable.ic_japen
+ 5 -> image = R.drawable.ic_china
+ 6 -> image = R.drawable.ic_eu
+ 7 -> image = R.drawable.ic_india
+ }
+
+ //如果返回true,则表示该卫星正在被用于定位计算;如果返回false,则表示该卫星未被用于定位计算
+ val signalDrawable = if (satellite.isUsedInFix) {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_in_use)
+ if (satellite.signal <= 19) {
+ R.drawable.bg_progress_bar_middle_low
+ } else if (satellite.signal in 20..29) {
+ R.drawable.bg_progress_bar_middle_high
+ } else {
+ R.drawable.bg_progress_bar_high
+ }
+ } else {
+ holder.setImageResource(R.id.satelliteStateView, R.drawable.ic_un_use)
+ R.drawable.bg_progress_bar_low
+ }
+ val signalProgressView = holder.getView(R.id.signalProgressView)
+ signalProgressView.progressDrawable = signalDrawable.convertDrawable(context)
+ signalProgressView.max = 63
+ signalProgressView.progress = satellite.signal
+
+ holder.setImageResource(R.id.nationalityView, image)
+ .setText(R.id.svidView, satellite.svid.split("_")[1])
+ .setText(R.id.signalValueView, "${satellite.signal}")
+ .setText(R.id.azimuthView, "${satellite.azimuth}°")
+ .setText(R.id.elevationView, "${satellite.elevation}°")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
new file mode 100644
index 0000000..84aa3bf
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/model/Satellite.java
@@ -0,0 +1,58 @@
+package com.casic.common.detector.gd.model;
+
+public class Satellite {
+ private String svid; // 卫星svid
+ private int type; // 卫星导航系统的类型
+ private int signal; // 卫星的信噪比(信号)
+ private int elevation; // 卫星的仰角
+ private int azimuth; // 卫星的方位角
+ private boolean usedInFix; // 是否有卫星的星历数据
+
+ public String getSvid() {
+ return svid;
+ }
+
+ public void setSvid(String svid) {
+ this.svid = svid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getSignal() {
+ return signal;
+ }
+
+ public void setSignal(int signal) {
+ this.signal = signal;
+ }
+
+ public int getElevation() {
+ return elevation;
+ }
+
+ public void setElevation(int elevation) {
+ this.elevation = elevation;
+ }
+
+ public int getAzimuth() {
+ return azimuth;
+ }
+
+ public void setAzimuth(int azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ public boolean isUsedInFix() {
+ return usedInFix;
+ }
+
+ public void setUsedInFix(boolean usedInFix) {
+ this.usedInFix = usedInFix;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
index c9b1be8..1b551b3 100644
--- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt
@@ -18,7 +18,6 @@
import com.casic.common.detector.gd.utils.LocaleConstant
import com.casic.common.detector.gd.utils.NtripAuthorizationCreator
import com.casic.common.detector.gd.utils.RTK
-import com.casic.common.detector.gd.view.MainActivity
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
@@ -65,12 +64,6 @@
connectQianXunServer()
RTK.getCurrentLocation(this) {
- val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation
- val message = weakHandler.obtainMessage()
- message.what = 2024090301
- message.obj = "${it.longitude},${it.latitude}"
- weakHandler.sendMessage(message)
-
if (socketClient.isRunning()) {
//连接成功就发送千寻请求报文
val gga = it.convertToGPGGA()
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
index 7d9ea01..b6e804b 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/LocaleConstant.kt
@@ -36,7 +36,7 @@
const val SATELLITE_EFFECTIVE_COUNT = "satelliteCount"
val POPUP_TITLES = arrayOf(
- "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务"
+ "更新数据", "下载工单", "关于软件", "事件上报", "标识器补全", "差分定位服务", "卫星定位信号"
)
var POINT_TYPE_ARRAY = arrayOf("管线", "管线附属物", "管线特征管点", "交叉穿越点")
var SPINNER_ARRAY = arrayOf(
diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
index 556a4c1..1a131eb 100644
--- a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt
@@ -36,7 +36,7 @@
}
val locationManager = context.getSystemService() ?: return
locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER, 0, 0f
+ LocationManager.GPS_PROVIDER, 3000, 0f
) {
Log.d(kTag, "${it.longitude}, ${it.latitude}")
rtkLocationListener.onLocationChanged(it)
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
index 211cb37..b398619 100644
--- a/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/common/detector/gd/view/MainActivity.kt
@@ -12,9 +12,7 @@
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
-import android.os.Handler
import android.os.IBinder
-import android.os.Message
import android.util.Log
import android.view.KeyEvent
import android.view.View
@@ -52,7 +50,6 @@
import com.casic.common.detector.gd.extensions.hexToString
import com.casic.common.detector.gd.extensions.initImmersionBar
import com.casic.common.detector.gd.extensions.isNumber
-import com.casic.common.detector.gd.extensions.toDegree
import com.casic.common.detector.gd.extensions.toHex
import com.casic.common.detector.gd.model.TaskDetailLocalModel
import com.casic.common.detector.gd.model.TaskModel
@@ -81,7 +78,6 @@
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialog
import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -95,12 +91,7 @@
class MainActivity : KotlinBaseActivity(), ClusterRender,
- OnClickClusterListener, OnSerialPortListener, Handler.Callback {
-
- //TODO 此代码正式版删除
- companion object {
- var weakReferenceHandler: WeakReferenceHandler? = null
- }
+ OnClickClusterListener, OnSerialPortListener {
private val kTag = "MainActivity"
private val context = this
@@ -145,7 +136,6 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//绑定串口通信服务
Intent(this, SerialPortService::class.java).also {
bindService(it, serviceConnection, Context.BIND_AUTO_CREATE)
@@ -288,6 +278,8 @@
rtkConfigLauncher.launch(it)
}
}
+
+ 6 -> navigatePageTo()
}
}
})
@@ -442,8 +434,6 @@
"0"
}
navigatePageTo(flag)
- //TODO 章丘审计版本
-// navigatePageTo()
}
}
@@ -473,19 +463,6 @@
}
}
- //TODO 此代码正式版删除
- override fun handleMessage(msg: Message): Boolean {
- if (msg.what == 2024090301) {
- val gps = msg.obj as String
- //转为度分秒
- val lngLat = gps.split(",")
- val lng = lngLat[0].toDouble().toDegree()
- val lat = lngLat[1].toDouble().toDegree()
- binding.nativeGpsView.text = "$lng, $lat"
- }
- return true
- }
-
private val rtkConfigLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
@@ -600,8 +577,6 @@
aMap.myLocationStyle = locationStyle//设置定位蓝点的Style
aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点
aMap.setOnMyLocationChangeListener {
- //TODO 此代码正式版删除
- binding.gdGpsView.text = "${it.longitude}, ${it.latitude}"
//经纬度逆编码
locationTool.antiCodingLocation(it, object : OnGetAddressListener {
override fun onGetAddress(address: String) {
diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
new file mode 100644
index 0000000..ab38185
--- /dev/null
+++ b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt
@@ -0,0 +1,156 @@
+package com.casic.common.detector.gd.view
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.location.GnssStatus
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.amap.api.location.AMapLocation
+import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter
+import com.casic.common.detector.gd.callback.OnGetLocationListener
+import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding
+import com.casic.common.detector.gd.extensions.toDegree
+import com.casic.common.detector.gd.model.Satellite
+import com.casic.common.detector.gd.utils.LocationTool
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
+import com.pengxh.kt.lite.extensions.getScreenHeight
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.widget.TitleBarView
+import kotlin.math.roundToInt
+
+class SatelliteStatusActivity : KotlinBaseActivity(),
+ LocationListener {
+
+ private val kTag = "SatelliteActivity"
+ private val context = this
+ private val locationManager by lazy { getSystemService