Always call stopMeasurementCollection before startMeasurementCollection

Bug: 253453668
Test: manual
Change-Id: I9f85c6be7a79540fd5fd8b851695c0de1742853d
diff --git a/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java b/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java
index 07e9fe6..6c4c829 100644
--- a/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java
+++ b/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java
@@ -115,6 +115,16 @@
         if (request.getIntervalMillis() == GnssMeasurementRequest.PASSIVE_INTERVAL) {
             return true;
         }
+        // The HAL doc does not specify if consecutive start() calls will be allowed.
+        // Some vendors may ignore the 2nd start() call if stop() is not called.
+        // Thus, here we always call stop() before calling start() to avoid being ignored.
+        if (mGnssNative.stopMeasurementCollection()) {
+            if (D) {
+                Log.d(TAG, "stopping gnss measurements");
+            }
+        } else {
+            Log.e(TAG, "error stopping gnss measurements");
+        }
         if (mGnssNative.startMeasurementCollection(request.isFullTracking(),
                 request.isCorrelationVectorOutputsEnabled(),
                 request.getIntervalMillis())) {