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()!! } + 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/app/src/main/res/drawable/ic_usa.xml b/app/src/main/res/drawable/ic_usa.xml new file mode 100644 index 0000000..e1d1ac4 --- /dev/null +++ b/app/src/main/res/drawable/ic_usa.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/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/app/src/main/res/drawable/ic_usa.xml b/app/src/main/res/drawable/ic_usa.xml new file mode 100644 index 0000000..e1d1ac4 --- /dev/null +++ b/app/src/main/res/drawable/ic_usa.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 419cc49..5e75d4d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -104,70 +104,25 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@color/themeColor" - android:orientation="vertical"> + android:orientation="horizontal"> - - + - - - - - - - - - - - - - - - - - - - + \ 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/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/app/src/main/res/drawable/ic_usa.xml b/app/src/main/res/drawable/ic_usa.xml new file mode 100644 index 0000000..e1d1ac4 --- /dev/null +++ b/app/src/main/res/drawable/ic_usa.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 419cc49..5e75d4d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -104,70 +104,25 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@color/themeColor" - android:orientation="vertical"> + android:orientation="horizontal"> - - + - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_satellite_status.xml b/app/src/main/res/layout/activity_satellite_status.xml new file mode 100644 index 0000000..276f5b2 --- /dev/null +++ b/app/src/main/res/layout/activity_satellite_status.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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/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/app/src/main/res/drawable/ic_usa.xml b/app/src/main/res/drawable/ic_usa.xml new file mode 100644 index 0000000..e1d1ac4 --- /dev/null +++ b/app/src/main/res/drawable/ic_usa.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 419cc49..5e75d4d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -104,70 +104,25 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@color/themeColor" - android:orientation="vertical"> + android:orientation="horizontal"> - - + - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_satellite_status.xml b/app/src/main/res/layout/activity_satellite_status.xml new file mode 100644 index 0000000..276f5b2 --- /dev/null +++ b/app/src/main/res/layout/activity_satellite_status.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_satellite_rv_l.xml b/app/src/main/res/layout/item_satellite_rv_l.xml new file mode 100644 index 0000000..dcfd77b --- /dev/null +++ b/app/src/main/res/layout/item_satellite_rv_l.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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/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/app/src/main/res/drawable/ic_usa.xml b/app/src/main/res/drawable/ic_usa.xml new file mode 100644 index 0000000..e1d1ac4 --- /dev/null +++ b/app/src/main/res/drawable/ic_usa.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 419cc49..5e75d4d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -104,70 +104,25 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@color/themeColor" - android:orientation="vertical"> + android:orientation="horizontal"> - - + - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_satellite_status.xml b/app/src/main/res/layout/activity_satellite_status.xml new file mode 100644 index 0000000..276f5b2 --- /dev/null +++ b/app/src/main/res/layout/activity_satellite_status.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_satellite_rv_l.xml b/app/src/main/res/layout/item_satellite_rv_l.xml new file mode 100644 index 0000000..dcfd77b --- /dev/null +++ b/app/src/main/res/layout/item_satellite_rv_l.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 91839d5..1584069 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -14,6 +14,9 @@ #803d7eff #FFF8F8F8 #80F5F5F5 + #D3D3D3 #D8D8D8 #37D4AE + #FFDE33 + #FF9933 \ 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/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/app/src/main/res/drawable/ic_usa.xml b/app/src/main/res/drawable/ic_usa.xml new file mode 100644 index 0000000..e1d1ac4 --- /dev/null +++ b/app/src/main/res/drawable/ic_usa.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 419cc49..5e75d4d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -104,70 +104,25 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@color/themeColor" - android:orientation="vertical"> + android:orientation="horizontal"> - - + - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_satellite_status.xml b/app/src/main/res/layout/activity_satellite_status.xml new file mode 100644 index 0000000..276f5b2 --- /dev/null +++ b/app/src/main/res/layout/activity_satellite_status.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_satellite_rv_l.xml b/app/src/main/res/layout/item_satellite_rv_l.xml new file mode 100644 index 0000000..dcfd77b --- /dev/null +++ b/app/src/main/res/layout/item_satellite_rv_l.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 91839d5..1584069 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -14,6 +14,9 @@ #803d7eff #FFF8F8F8 #80F5F5F5 + #D3D3D3 #D8D8D8 #37D4AE + #FFDE33 + #FF9933 \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index ff78968..4f5da7a 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -33,6 +33,7 @@ 75dp 80dp 100dp + 110dp 125dp 150dp 200dp 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/app/src/main/res/drawable/ic_usa.xml b/app/src/main/res/drawable/ic_usa.xml new file mode 100644 index 0000000..e1d1ac4 --- /dev/null +++ b/app/src/main/res/drawable/ic_usa.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 419cc49..5e75d4d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -104,70 +104,25 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@color/themeColor" - android:orientation="vertical"> + android:orientation="horizontal"> - - + - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_satellite_status.xml b/app/src/main/res/layout/activity_satellite_status.xml new file mode 100644 index 0000000..276f5b2 --- /dev/null +++ b/app/src/main/res/layout/activity_satellite_status.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_satellite_rv_l.xml b/app/src/main/res/layout/item_satellite_rv_l.xml new file mode 100644 index 0000000..dcfd77b --- /dev/null +++ b/app/src/main/res/layout/item_satellite_rv_l.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 91839d5..1584069 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -14,6 +14,9 @@ #803d7eff #FFF8F8F8 #80F5F5F5 + #D3D3D3 #D8D8D8 #37D4AE + #FFDE33 + #FF9933 \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index ff78968..4f5da7a 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -33,6 +33,7 @@ 75dp 80dp 100dp + 110dp 125dp 150dp 200dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5a96ecc..3859695 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -89,4 +89,9 @@ @dimen/sp_14 true + + \ No newline at end of file