diff --git a/android/app/src/main/kotlin/dev/fiatcode/tracpulse/service/LocationTrackingService.kt b/android/app/src/main/kotlin/dev/fiatcode/tracpulse/service/LocationTrackingService.kt index 6c064a6..e66c453 100644 --- a/android/app/src/main/kotlin/dev/fiatcode/tracpulse/service/LocationTrackingService.kt +++ b/android/app/src/main/kotlin/dev/fiatcode/tracpulse/service/LocationTrackingService.kt @@ -57,6 +57,7 @@ class LocationTrackingService : Service() { private var isTracking = false private var isNetworkAvailable = true private var bypassFilterOnce = false + private val speedHandler = Handler(Looper.getMainLooper()) private var currentConfig: TrackingConfig? = null private var pendingSpeedLocation: Location? = null @@ -188,6 +189,7 @@ class LocationTrackingService : Service() { Log.d(TAG, "stopTracking: set tracking_active=false") fusedLocationProvider.stopLocationUpdates() heartbeatScheduler.cancelHeartbeat() + speedHandler.removeCallbacksAndMessages(null) releaseWakeLock() stopForeground(STOP_FOREGROUND_REMOVE) @@ -236,8 +238,11 @@ class LocationTrackingService : Service() { val nativeSpeed = if (location.hasSpeed()) location.speed else null if (nativeSpeed == null || nativeSpeed <= 0) { - pendingSpeedLocation = location - requestLocationForSpeedCalculation() + if (!speedRequestPending) { + pendingSpeedLocation = location + requestLocationForSpeedCalculation() + } + return } val traccarLocation = TraccarLocation( @@ -296,7 +301,7 @@ class LocationTrackingService : Service() { if (speedRequestPending) return speedRequestPending = true - Handler(Looper.getMainLooper()).postDelayed({ + speedHandler.postDelayed({ fusedLocationProvider.getLastLocation { location -> location?.let { val calculatedSpeed = distanceFilterProcessor.getCalculatedSpeed(it)