From ed6936545d20cc490145d2936cee4387be2afd53 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期一, 22 十二月 2025 19:04:34 +0800
Subject: [PATCH] 优化了导航预览模式

---
 src/gecaoji/Device.java |   99 +++++++++++++++++++++++++++++++++----------------
 1 files changed, 66 insertions(+), 33 deletions(-)

diff --git a/src/gecaoji/Device.java b/src/gecaoji/Device.java
index 97a3333..9e26eff 100644
--- a/src/gecaoji/Device.java
+++ b/src/gecaoji/Device.java
@@ -417,25 +417,38 @@
             mowerNumber = incomingDeviceId;
         }
 
+        // 妫�鏌ユ槸鍚︽鍦ㄥ鑸瑙堟ā寮�
+        boolean isNavigating = checkIfNavigating();
+
         String latitudeValue = sanitizeField(fields, 2);
         String latitudeHemisphere = sanitizeField(fields, 3);
         String longitudeValue = sanitizeField(fields, 4);
         String longitudeHemisphere = sanitizeField(fields, 5);
 
-        String combinedLatitude = combineCoordinate(latitudeValue, latitudeHemisphere);
-        if (hasMeaningfulValue(combinedLatitude)) {
-            realtimeLatitude = combinedLatitude;
-        }
-        String combinedLongitude = combineCoordinate(longitudeValue, longitudeHemisphere);
-        if (hasMeaningfulValue(combinedLongitude)) {
-            realtimeLongitude = combinedLongitude;
+        // 鍙湁鍦ㄩ潪瀵艰埅棰勮妯″紡涓嬫墠鏇存柊浣嶇疆鐩稿叧鏁版嵁
+        if (!isNavigating) {
+            String combinedLatitude = combineCoordinate(latitudeValue, latitudeHemisphere);
+            if (hasMeaningfulValue(combinedLatitude)) {
+                realtimeLatitude = combinedLatitude;
+            }
+            String combinedLongitude = combineCoordinate(longitudeValue, longitudeHemisphere);
+            if (hasMeaningfulValue(combinedLongitude)) {
+                realtimeLongitude = combinedLongitude;
+            }
+
+            String altitudeValue = sanitizeField(fields, 9);
+            if (hasMeaningfulValue(altitudeValue)) {
+                realtimeAltitude = altitudeValue;
+            }
+
+            // 鏇存柊浣嶇疆鍧愭爣
+            updateRelativeCoordinates(latitudeValue, latitudeHemisphere, longitudeValue, longitudeHemisphere);
+            
+            // 鏇存柊鑸悜瑙掞紙浣嶇疆鐩稿叧锛�
+            heading = defaultIfEmpty(sanitizeField(fields, 19));
         }
 
-        String altitudeValue = sanitizeField(fields, 9);
-        if (hasMeaningfulValue(altitudeValue)) {
-            realtimeAltitude = altitudeValue;
-        }
-
+        // 鍏朵粬鏁版嵁锛堢數閲忋�佸崼鏄熸暟绛夛級濮嬬粓鏇存柊
         positioningStatus = defaultIfEmpty(sanitizeField(fields, 6));
         // 鍚屾鍒扮粯鍒舵ā鍧楃殑鏁版嵁婧愶紝淇濊瘉寰�杩旂粯鍒跺畾鏃跺櫒鑳借瘑鍒畾浣嶈川閲�
         try {
@@ -448,10 +461,7 @@
         battery = defaultIfEmpty(sanitizeField(fields, 16));
         pitch = defaultIfEmpty(sanitizeField(fields, 17));
         realtimeSpeed = defaultIfEmpty(sanitizeField(fields, 18));
-        heading = defaultIfEmpty(sanitizeField(fields, 19));
         GupdateTime = String.valueOf(System.currentTimeMillis());
-
-        updateRelativeCoordinates(latitudeValue, latitudeHemisphere, longitudeValue, longitudeHemisphere);
     }
     
     /**涓插彛鏇存柊GNGGA鏁版嵁*/
@@ -471,26 +481,38 @@
             return;
         }
 
-        
+        // 妫�鏌ユ槸鍚︽鍦ㄥ鑸瑙堟ā寮�
+        boolean isNavigating = checkIfNavigating();
+
         String latitudeValue = sanitizeField(fields, 2);
         String latitudeHemisphere = sanitizeField(fields, 3);
         String longitudeValue = sanitizeField(fields, 4);
         String longitudeHemisphere = sanitizeField(fields, 5);
 
-        String combinedLatitude = combineCoordinate(latitudeValue, latitudeHemisphere);
-        if (hasMeaningfulValue(combinedLatitude)) {
-            realtimeLatitude = combinedLatitude;
-        }
-        String combinedLongitude = combineCoordinate(longitudeValue, longitudeHemisphere);
-        if (hasMeaningfulValue(combinedLongitude)) {
-            realtimeLongitude = combinedLongitude;
+        // 鍙湁鍦ㄩ潪瀵艰埅棰勮妯″紡涓嬫墠鏇存柊浣嶇疆鐩稿叧鏁版嵁
+        if (!isNavigating) {
+            String combinedLatitude = combineCoordinate(latitudeValue, latitudeHemisphere);
+            if (hasMeaningfulValue(combinedLatitude)) {
+                realtimeLatitude = combinedLatitude;
+            }
+            String combinedLongitude = combineCoordinate(longitudeValue, longitudeHemisphere);
+            if (hasMeaningfulValue(combinedLongitude)) {
+                realtimeLongitude = combinedLongitude;
+            }
+
+            String altitudeValue = sanitizeField(fields, 9);
+            if (hasMeaningfulValue(altitudeValue)) {
+                realtimeAltitude = altitudeValue;
+            }
+
+            // 鏇存柊浣嶇疆鍧愭爣
+            updateRelativeCoordinates(latitudeValue, latitudeHemisphere, longitudeValue, longitudeHemisphere);
+            
+            // 涓插彛鏀跺埌GNGGA鏁版嵁鍚庯紝瑙﹀彂鎷栧熬鏇存柊
+            notifyMowerTrailUpdate();
         }
 
-        String altitudeValue = sanitizeField(fields, 9);
-        if (hasMeaningfulValue(altitudeValue)) {
-            realtimeAltitude = altitudeValue;
-        }
-
+        // 鍏朵粬鏁版嵁锛堢數閲忋�佸崼鏄熸暟绛夛級濮嬬粓鏇存柊
         positioningStatus = defaultIfEmpty(sanitizeField(fields, 6));
         // 鍚屾鍒扮粯鍒舵ā鍧楃殑鏁版嵁婧愶紝淇濊瘉寰�杩旂粯鍒跺畾鏃跺櫒鑳借瘑鍒畾浣嶈川閲�
         try {
@@ -502,17 +524,28 @@
         differentialAge = defaultIfEmpty(sanitizeField(fields, 13));       
         realtimeSpeed ="0";        
         GupdateTime = String.valueOf(System.currentTimeMillis());
-
-        updateRelativeCoordinates(latitudeValue, latitudeHemisphere, longitudeValue, longitudeHemisphere);
-        
-        // 涓插彛鏀跺埌GNGGA鏁版嵁鍚庯紝瑙﹀彂鎷栧熬鏇存柊
-        notifyMowerTrailUpdate();
     }
     
     /**
      * 閫氱煡鍦板浘娓叉煋鍣ㄦ洿鏂板壊鑽夋満鎷栧熬
      * 褰撲覆鍙f敹鍒癎NGGA鏁版嵁骞舵洿鏂颁綅缃悗璋冪敤
      */
+    /**
+     * 妫�鏌ユ槸鍚︽鍦ㄥ鑸瑙堟ā寮�
+     * @return 濡傛灉姝e湪瀵艰埅棰勮杩斿洖true锛屽惁鍒欒繑鍥瀎alse
+     */
+    private boolean checkIfNavigating() {
+        try {
+            dikuai.daohangyulan nav = dikuai.daohangyulan.getInstance();
+            if (nav != null) {
+                return nav.isNavigating();
+            }
+        } catch (Exception e) {
+            // 濡傛灉鑾峰彇瀵艰埅瀹炰緥澶辫触锛岃繑鍥瀎alse锛堜笉褰卞搷涓昏鍔熻兘锛�
+        }
+        return false;
+    }
+    
     private void notifyMowerTrailUpdate() {
         try {
             // 閫氳繃Shouye.getInstance()鑾峰彇瀹炰緥锛岄伩鍏嶅惊鐜緷璧�

--
Gitblit v1.10.0