From cd05cfe28c03f70b7f7099f4126b35877925bdce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Mon, 17 Dec 2018 13:17:31 +0100 Subject: [android] location update fastest interval workaround --- .../mapbox/mapboxsdk/location/LocationComponent.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java index 07194cdc89..d4083c6634 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java @@ -5,6 +5,7 @@ import android.content.Context; import android.hardware.SensorManager; import android.location.Location; import android.os.Looper; +import android.os.SystemClock; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresPermission; @@ -162,6 +163,10 @@ public final class LocationComponent { private final CopyOnWriteArrayList onCameraTrackingChangedListeners = new CopyOnWriteArrayList<>(); + // Workaround for too frequent updates, see https://github.com/mapbox/mapbox-gl-native/issues/13587 + private long fastestInterval; + private long lastUpdateTime; + /** * Internal use. *

@@ -693,19 +698,21 @@ public final class LocationComponent { @SuppressLint("MissingPermission") public void setLocationEngine(@Nullable LocationEngine locationEngine) { if (this.locationEngine != null) { - // If internal location engines being used, extra steps need to be taken to deconstruct the - // instance. + // If internal location engines being used, extra steps need to be taken to deconstruct the instance. this.locationEngine.removeLocationUpdates(currentLocationEngineListener); this.locationEngine = null; } if (locationEngine != null) { + fastestInterval = locationEngineRequest.getFastestInterval(); this.locationEngine = locationEngine; if (isLayerReady && isEnabled) { setLastLocation(); locationEngine.requestLocationUpdates( locationEngineRequest, currentLocationEngineListener, Looper.getMainLooper()); } + } else { + fastestInterval = 0; } } @@ -1112,6 +1119,13 @@ public final class LocationComponent { } else if (!isLayerReady) { lastLocation = location; return; + } else { + long currentTime = SystemClock.elapsedRealtime(); + if (currentTime - lastUpdateTime < fastestInterval) { + return; + } else { + lastUpdateTime = currentTime; + } } showLocationLayerIfHidden(); -- cgit v1.2.1