summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Li <andrey.li@mapbox.com>2018-10-26 09:08:24 -0700
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2018-11-29 19:26:21 +0100
commit2c70f4b6dc7d9c9c67f7a78e4290335f137392d9 (patch)
tree11a10449edc98e736bc205007e66126eda704d4e
parentc9add3646ea80654a3e2a2e81d750a92f7c8e999 (diff)
downloadqtlocation-mapboxgl-2c70f4b6dc7d9c9c67f7a78e4290335f137392d9.tar.gz
[android] Initial integration with liblocation 1.0.0 and telemetry 4.0.0, bumped gms to 16.0.0
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java105
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt21
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt25
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java62
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/ManualLocationUpdatesActivity.java59
-rw-r--r--platform/android/gradle/dependencies.gradle7
6 files changed, 149 insertions, 130 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 fc125ef03a..d0b0bb733d 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
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.hardware.SensorManager;
import android.location.Location;
+import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresPermission;
@@ -11,9 +12,10 @@ import android.support.annotation.StyleRes;
import android.view.WindowManager;
import com.mapbox.android.core.location.LocationEngine;
-import com.mapbox.android.core.location.LocationEngineListener;
-import com.mapbox.android.core.location.LocationEnginePriority;
+import com.mapbox.android.core.location.LocationEngineCallback;
import com.mapbox.android.core.location.LocationEngineProvider;
+import com.mapbox.android.core.location.LocationEngineRequest;
+import com.mapbox.android.core.location.LocationEngineResult;
import com.mapbox.mapboxsdk.R;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.camera.CameraUpdate;
@@ -27,6 +29,9 @@ import com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveListener;
import com.mapbox.mapboxsdk.maps.MapboxMap.OnMapClickListener;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
@@ -59,10 +64,10 @@ import static com.mapbox.mapboxsdk.location.LocationComponentConstants.DEFAULT_T
* this plugin work as expected.
* <p>
* This component offers a default, built-in {@link LocationEngine} with some of the activation methods.
- * This engine will be obtained by {@link LocationEngineProvider#obtainBestLocationEngineAvailable} which defaults
- * to the {@link com.mapbox.android.core.location.AndroidLocationEngine}. If you'd like to utilize Google Play Services
+ * This engine will be obtained by {@link LocationEngineProvider#getBestLocationEngine(Context, boolean)} which defaults
+ * to the {@link com.mapbox.android.core.location.MapboxFusedLocationEngineImpl}. If you'd like to utilize Google Play Services
* for more precise location updates, simply add the Google Play Location Services dependency in your build script.
- * This will make the default engine the {@link com.mapbox.android.core.location.GoogleLocationEngine} instead.
+ * This will make the default engine the {@link com.mapbox.android.core.location.GoogleLocationEngineImpl} instead.
* <p>
* For location puck animation purposes, like navigation,
* we recommend limiting the maximum zoom level of the map for the best user experience.
@@ -71,6 +76,8 @@ import static com.mapbox.mapboxsdk.location.LocationComponentConstants.DEFAULT_T
*/
public final class LocationComponent {
private static final String TAG = "Mbgl-LocationComponent";
+ private static final long DEFAULT_INTERVAL_MILLIS = 1000;
+ private static final long DEFAULT_FASTEST_INTERVAL_MILLIS = 1000;
@NonNull
private final MapboxMap mapboxMap;
@@ -489,19 +496,14 @@ public final class LocationComponent {
// If internal location engines being used, extra steps need to be taken to deconstruct the
// instance.
if (usingInternalLocationEngine) {
- this.locationEngine.removeLocationUpdates();
- this.locationEngine.deactivate();
usingInternalLocationEngine = false;
}
- this.locationEngine.removeLocationEngineListener(locationEngineListener);
+ this.locationEngine.removeLocationUpdates(locationEngineListener);
this.locationEngine = null;
}
if (locationEngine != null) {
this.locationEngine = locationEngine;
- if (isEnabled) {
- this.locationEngine.addLocationEngineListener(locationEngineListener);
- }
}
}
@@ -544,11 +546,31 @@ public final class LocationComponent {
@Nullable
@RequiresPermission(anyOf = {ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION})
public Location getLastKnownLocation() {
- Location location = locationEngine != null ? locationEngine.getLastLocation() : null;
- if (location == null) {
- location = lastLocation;
+ if (locationEngine == null) {
+ return null;
+ }
+ // TODO: decide if we want to change signature of this method, for now make it work as is
+ final AtomicReference<LocationEngineResult> resultRef = new AtomicReference<>();
+ CountDownLatch latch = new CountDownLatch(1);
+ locationEngine.getLastLocation(new LocationEngineCallback<LocationEngineResult>() {
+ @Override
+ public void onSuccess(LocationEngineResult result) {
+ resultRef.set(result);
+ latch.countDown();
+ }
+
+ @Override
+ public void onFailure(@NonNull Exception exception) {
+ // TODO: log exception
+ }
+ });
+ try {
+ latch.await(2, TimeUnit.SECONDS);
+ } catch (InterruptedException ie) {
+ ie.printStackTrace();
}
- return location;
+ LocationEngineResult result = resultRef.get();
+ return result != null ? result.getLastLocation() : null;
}
/**
@@ -690,9 +712,6 @@ public final class LocationComponent {
* Internal use.
*/
public void onDestroy() {
- if (locationEngine != null && usingInternalLocationEngine) {
- locationEngine.deactivate();
- }
}
/**
@@ -731,9 +750,13 @@ public final class LocationComponent {
if (isEnabled) {
if (locationEngine != null) {
- locationEngine.addLocationEngineListener(locationEngineListener);
- if (locationEngine.isConnected() && usingInternalLocationEngine) {
- locationEngine.requestLocationUpdates();
+ if (usingInternalLocationEngine) {
+ try {
+ locationEngine.requestLocationUpdates(getLocationRequst(DEFAULT_INTERVAL_MILLIS),
+ locationEngineListener, Looper.getMainLooper());
+ } catch (SecurityException se) {
+ se.printStackTrace();
+ }
}
}
setCameraMode(locationCameraController.getCameraMode());
@@ -754,9 +777,8 @@ public final class LocationComponent {
locationAnimatorCoordinator.cancelAllAnimations();
if (locationEngine != null) {
if (usingInternalLocationEngine) {
- locationEngine.removeLocationUpdates();
+ locationEngine.removeLocationUpdates(locationEngineListener);
}
- locationEngine.removeLocationEngineListener(locationEngineListener);
}
mapboxMap.removeOnCameraMoveListener(onCameraMoveListener);
mapboxMap.removeOnCameraIdleListener(onCameraIdleListener);
@@ -801,19 +823,17 @@ public final class LocationComponent {
private void initializeLocationEngine(@NonNull Context context) {
if (this.locationEngine != null) {
- if (usingInternalLocationEngine) {
- this.locationEngine.removeLocationUpdates();
- this.locationEngine.deactivate();
- }
- this.locationEngine.removeLocationEngineListener(locationEngineListener);
+ this.locationEngine.removeLocationUpdates(locationEngineListener);
}
-
usingInternalLocationEngine = true;
- locationEngine = new LocationEngineProvider(context).obtainBestLocationEngineAvailable();
- locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
- locationEngine.setFastestInterval(1000);
- locationEngine.addLocationEngineListener(locationEngineListener);
- locationEngine.activate();
+ locationEngine = LocationEngineProvider.getBestLocationEngine(context, false);
+ }
+
+ private static LocationEngineRequest getLocationRequst(long interval) {
+ return new LocationEngineRequest.Builder(interval)
+ .setFastestInterval(DEFAULT_FASTEST_INTERVAL_MILLIS)
+ .setPriority(LocationEngineRequest.PRIORITY_HIGH_ACCURACY)
+ .build();
}
private void enableLocationComponent() {
@@ -986,18 +1006,19 @@ public final class LocationComponent {
};
@NonNull
- private LocationEngineListener locationEngineListener = new LocationEngineListener() {
+ private LocationEngineCallback<LocationEngineResult> locationEngineListener =
+ new LocationEngineCallback<LocationEngineResult>() {
@Override
- @SuppressWarnings( {"MissingPermission"})
- public void onConnected() {
- if (usingInternalLocationEngine && isLayerReady && isEnabled) {
- locationEngine.requestLocationUpdates();
+ public void onSuccess(LocationEngineResult result) {
+ Location location = result.getLastLocation();
+ if (location != null) {
+ updateLocation(location, false);
}
}
@Override
- public void onLocationChanged(Location location) {
- updateLocation(location, false);
+ public void onFailure(@NonNull Exception exception) {
+ // TODO: handle error
}
};
@@ -1019,4 +1040,4 @@ public final class LocationComponent {
}
}
};
-}
+} \ No newline at end of file
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt
index 444b478219..adb01241c4 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt
@@ -77,7 +77,6 @@ class LocationComponentTest : BaseActivityTest() {
assertThat(locationEngine, notNullValue())
uiController.loopMainThreadForAtLeast(MAP_CONNECTION_DELAY)
- assertThat(locationEngine?.isConnected, `is`(true))
}
}
@@ -107,7 +106,6 @@ class LocationComponentTest : BaseActivityTest() {
assertThat(componentOptions, notNullValue())
uiController.loopMainThreadForAtLeast(MAP_CONNECTION_DELAY)
- assertThat(locationEngine?.isConnected, `is`(true))
assertThat(componentOptions?.accuracyAlpha(), `is`(.5f))
assertThat(componentOptions?.accuracyColor(), `is`(Color.BLUE))
}
@@ -1174,25 +1172,6 @@ class LocationComponentTest : BaseActivityTest() {
executeComponentTest(componentAction)
}
- @Test
- fun defaultLocationEngine_deactivatedWhenDestroyed() {
- val componentAction = object : LocationComponentAction.OnPerformLocationComponentAction {
- override fun onLocationComponentAction(component: LocationComponent, mapboxMap: MapboxMap,
- uiController: UiController, context: Context) {
- component.activateLocationComponent(context)
- component.isLocationComponentEnabled = true
- uiController.loopMainThreadForAtLeast(MAP_CONNECTION_DELAY)
- assertThat(component.locationEngine?.isConnected, `is`(true))
-
- component.onStop()
- component.onDestroy()
- assertThat(component.locationEngine?.isConnected, `is`(false))
- }
- }
-
- executeComponentTest(componentAction)
- }
-
@After
override fun afterTest() {
super.afterTest()
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt
index 035ad67e12..98fe13e8eb 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt
@@ -10,7 +10,10 @@ import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
-import com.mapbox.android.core.location.LocationEngineListener
+import com.mapbox.android.core.location.LocationEngine
+import com.mapbox.android.core.location.LocationEngineCallback
+import com.mapbox.android.core.location.LocationEngineProvider
+import com.mapbox.android.core.location.LocationEngineResult
import com.mapbox.android.core.permissions.PermissionsListener
import com.mapbox.android.core.permissions.PermissionsManager
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory
@@ -20,6 +23,7 @@ import com.mapbox.mapboxsdk.maps.MapboxMap
import com.mapbox.mapboxsdk.location.LocationComponent
import com.mapbox.mapboxsdk.testapp.R
import kotlinx.android.synthetic.main.activity_location_layer_fragment.*
+import java.lang.Exception
class LocationFragmentActivity : AppCompatActivity() {
private lateinit var permissionsManager: PermissionsManager
@@ -78,7 +82,7 @@ class LocationFragmentActivity : AppCompatActivity() {
permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
- class LocationFragment : Fragment(), LocationEngineListener {
+ class LocationFragment : Fragment(), LocationEngineCallback<LocationEngineResult> {
companion object {
const val TAG = "LFragment"
fun newInstance(): LocationFragment {
@@ -101,21 +105,19 @@ class LocationFragmentActivity : AppCompatActivity() {
mapView.getMapAsync {
mapboxMap = it
component = mapboxMap.locationComponent
- component?.activateLocationComponent(activity)
+ component?.activateLocationComponent(activity,
+ LocationEngineProvider.getBestLocationEngine(activity, false))
component?.isLocationComponentEnabled = true
- component?.locationEngine?.addLocationEngineListener(this)
+ component?.locationEngine?.getLastLocation(this)
}
}
- override fun onLocationChanged(location: Location?) {
- if (location != null) {
- mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(location), 12.0))
- component?.locationEngine?.removeLocationEngineListener(this)
- }
+ override fun onSuccess(result: LocationEngineResult?) {
+ mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(result?.lastLocation), 12.0))
}
- override fun onConnected() {
- // no impl
+ override fun onFailure(exception: Exception) {
+ //noop
}
override fun onStart() {
@@ -151,7 +153,6 @@ class LocationFragmentActivity : AppCompatActivity() {
override fun onDestroyView() {
super.onDestroyView()
mapView.onDestroy()
- component?.locationEngine?.removeLocationEngineListener(this)
}
}
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java
index c3de31cdca..078b5c7ab5 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.content.res.Configuration;
import android.location.Location;
import android.os.Bundle;
+import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.ListPopupWindow;
@@ -15,9 +16,10 @@ import android.widget.Button;
import android.widget.Toast;
import com.mapbox.android.core.location.LocationEngine;
-import com.mapbox.android.core.location.LocationEngineListener;
-import com.mapbox.android.core.location.LocationEnginePriority;
+import com.mapbox.android.core.location.LocationEngineCallback;
import com.mapbox.android.core.location.LocationEngineProvider;
+import com.mapbox.android.core.location.LocationEngineRequest;
+import com.mapbox.android.core.location.LocationEngineResult;
import com.mapbox.android.core.permissions.PermissionsListener;
import com.mapbox.android.core.permissions.PermissionsManager;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
@@ -37,7 +39,10 @@ import java.util.ArrayList;
import java.util.List;
public class LocationModesActivity extends AppCompatActivity implements OnMapReadyCallback,
- LocationEngineListener, OnLocationClickListener, OnCameraTrackingChangedListener {
+ OnLocationClickListener, OnCameraTrackingChangedListener {
+
+ private static final long DEFAULT_INTERVAL_MILLIS = 1000;
+ private static final long DEFAULT_FASTEST_INTERVAL_MILLIS = 1000;
private MapView mapView;
private Button locationModeBtn;
@@ -62,6 +67,8 @@ public class LocationModesActivity extends AppCompatActivity implements OnMapRea
private Location lastLocation;
+ private LocationEngineCallback<LocationEngineResult> locationEngineCallback;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -134,11 +141,19 @@ public class LocationModesActivity extends AppCompatActivity implements OnMapRea
public void onMapReady(@NonNull MapboxMap mapboxMap) {
this.mapboxMap = mapboxMap;
- locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
- locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
- locationEngine.setFastestInterval(1000);
- locationEngine.addLocationEngineListener(this);
- locationEngine.activate();
+ locationEngine = LocationEngineProvider.getBestLocationEngine(getApplicationContext(),
+ false);
+ locationEngineCallback = new LocationEngineCallback<LocationEngineResult>() {
+ @Override
+ public void onSuccess(LocationEngineResult result) {
+ // noop
+ }
+
+ @Override
+ public void onFailure(@NonNull Exception exception) {
+ // noop
+ }
+ };
int[] padding;
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
@@ -230,16 +245,15 @@ public class LocationModesActivity extends AppCompatActivity implements OnMapRea
}
@Override
- @SuppressWarnings( {"MissingPermission"})
protected void onStart() {
super.onStart();
mapView.onStart();
if (locationEngine != null) {
- locationEngine.addLocationEngineListener(this);
- if (locationEngine.isConnected()) {
- locationEngine.requestLocationUpdates();
- } else {
- locationEngine.activate();
+ try {
+ locationEngine.requestLocationUpdates(getLocationRequst(DEFAULT_INTERVAL_MILLIS),
+ locationEngineCallback, Looper.getMainLooper());
+ } catch (SecurityException se) {
+ se.printStackTrace();
}
}
}
@@ -261,8 +275,7 @@ public class LocationModesActivity extends AppCompatActivity implements OnMapRea
super.onStop();
mapView.onStop();
if (locationEngine != null) {
- locationEngine.removeLocationEngineListener(this);
- locationEngine.removeLocationUpdates();
+ locationEngine.removeLocationUpdates(locationEngineCallback);
}
}
@@ -282,9 +295,6 @@ public class LocationModesActivity extends AppCompatActivity implements OnMapRea
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
- if (locationEngine != null) {
- locationEngine.deactivate();
- }
}
@Override
@@ -293,15 +303,11 @@ public class LocationModesActivity extends AppCompatActivity implements OnMapRea
mapView.onLowMemory();
}
- @Override
- @SuppressWarnings( {"MissingPermission"})
- public void onConnected() {
- locationEngine.requestLocationUpdates();
- }
-
- @Override
- public void onLocationChanged(Location location) {
- // no impl
+ private static LocationEngineRequest getLocationRequst(long interval) {
+ return new LocationEngineRequest.Builder(interval)
+ .setFastestInterval(DEFAULT_FASTEST_INTERVAL_MILLIS)
+ .setPriority(LocationEngineRequest.PRIORITY_HIGH_ACCURACY)
+ .build();
}
@Override
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/ManualLocationUpdatesActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/ManualLocationUpdatesActivity.java
index c7926364dc..ee65b97570 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/ManualLocationUpdatesActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/ManualLocationUpdatesActivity.java
@@ -2,6 +2,7 @@ package com.mapbox.mapboxsdk.testapp.activity.location;
import android.location.Location;
import android.os.Bundle;
+import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
@@ -9,9 +10,10 @@ import android.view.View;
import android.widget.Toast;
import com.mapbox.android.core.location.LocationEngine;
-import com.mapbox.android.core.location.LocationEngineListener;
-import com.mapbox.android.core.location.LocationEnginePriority;
+import com.mapbox.android.core.location.LocationEngineCallback;
import com.mapbox.android.core.location.LocationEngineProvider;
+import com.mapbox.android.core.location.LocationEngineRequest;
+import com.mapbox.android.core.location.LocationEngineResult;
import com.mapbox.android.core.permissions.PermissionsListener;
import com.mapbox.android.core.permissions.PermissionsManager;
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
@@ -27,7 +29,10 @@ import java.util.List;
import timber.log.Timber;
public class ManualLocationUpdatesActivity extends AppCompatActivity implements OnMapReadyCallback,
- LocationEngineListener {
+ LocationEngineCallback<LocationEngineResult> {
+
+ private static final long DEFAULT_INTERVAL_MILLIS = 1000;
+ private static final long DEFAULT_FASTEST_INTERVAL_MILLIS = 1000;
private MapView mapView;
private LocationComponent locationComponent;
@@ -116,35 +121,32 @@ public class ManualLocationUpdatesActivity extends AppCompatActivity implements
@Override
public void onMapReady(@NonNull MapboxMap mapboxMap) {
- locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
- locationEngine.addLocationEngineListener(this);
- locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
- locationEngine.activate();
+ locationEngine = LocationEngineProvider.getBestLocationEngine(getApplicationContext(),
+ false);
locationComponent = mapboxMap.getLocationComponent();
locationComponent.activateLocationComponent(this, locationEngine);
locationComponent.setLocationComponentEnabled(true);
locationComponent.setRenderMode(RenderMode.COMPASS);
}
- @Override
- @SuppressWarnings( {"MissingPermission"})
- public void onConnected() {
- locationEngine.requestLocationUpdates();
- }
-
- @Override
- public void onLocationChanged(Location location) {
- Timber.d("Location change occurred: %s", location.toString());
+ private static LocationEngineRequest getLocationRequst(long interval) {
+ return new LocationEngineRequest.Builder(interval)
+ .setFastestInterval(DEFAULT_FASTEST_INTERVAL_MILLIS)
+ .setPriority(LocationEngineRequest.PRIORITY_HIGH_ACCURACY)
+ .build();
}
@Override
- @SuppressWarnings( {"MissingPermission"})
protected void onStart() {
super.onStart();
mapView.onStart();
if (locationEngine != null) {
- locationEngine.requestLocationUpdates();
- locationEngine.addLocationEngineListener(this);
+ try {
+ locationEngine.requestLocationUpdates(getLocationRequst(DEFAULT_INTERVAL_MILLIS),
+ this, Looper.getMainLooper());
+ } catch (SecurityException se) {
+ se.printStackTrace();
+ }
}
}
@@ -165,8 +167,7 @@ public class ManualLocationUpdatesActivity extends AppCompatActivity implements
super.onStop();
mapView.onStop();
if (locationEngine != null) {
- locationEngine.removeLocationEngineListener(this);
- locationEngine.removeLocationUpdates();
+ locationEngine.removeLocationUpdates(this);
}
}
@@ -180,9 +181,6 @@ public class ManualLocationUpdatesActivity extends AppCompatActivity implements
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
- if (locationEngine != null) {
- locationEngine.deactivate();
- }
}
@Override
@@ -190,4 +188,17 @@ public class ManualLocationUpdatesActivity extends AppCompatActivity implements
super.onLowMemory();
mapView.onLowMemory();
}
+
+ @Override
+ public void onSuccess(LocationEngineResult result) {
+ Location location = result.getLastLocation();
+ if (location != null) {
+ Timber.d("Location change occurred: %s", location.toString());
+ }
+ }
+
+ @Override
+ public void onFailure(@NonNull Exception exception) {
+ Timber.d("Location engine error occurred: %s", exception.getMessage());
+ }
} \ No newline at end of file
diff --git a/platform/android/gradle/dependencies.gradle b/platform/android/gradle/dependencies.gradle
index a076cad4bf..296572d214 100644
--- a/platform/android/gradle/dependencies.gradle
+++ b/platform/android/gradle/dependencies.gradle
@@ -9,7 +9,7 @@ ext {
versions = [
mapboxServices : '4.1.0',
- mapboxTelemetry : '3.5.4',
+ mapboxTelemetry : '4.0.0',
mapboxGestures : '0.3.0',
supportLib : '27.1.1',
constraintLayout: '1.1.2',
@@ -23,7 +23,8 @@ ext {
okhttp : '3.11.0',
kotlin : '1.2.51',
licenses : '0.8.41',
- lint : '26.1.3'
+ lint : '26.1.3',
+ gms : '16.0.0'
]
dependenciesList = [
@@ -53,7 +54,7 @@ ext {
supportRecyclerView : "com.android.support:recyclerview-v7:${versions.supportLib}",
supportConstraintLayout: "com.android.support.constraint:constraint-layout:${versions.constraintLayout}",
- gmsLocation : 'com.google.android.gms:play-services-location:11.0.4',
+ gmsLocation : "com.google.android.gms:play-services-location:${versions.gms}",
timber : "com.jakewharton.timber:timber:${versions.timber}",
okhttp3 : "com.squareup.okhttp3:okhttp:${versions.okhttp}",
leakCanaryDebug : "com.squareup.leakcanary:leakcanary-android:${versions.leakCanary}",