From c892a201046686372d1e148f01e7a9a8c509c0d0 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 9 Jan 2018 08:25:57 +1300 Subject: [PATCH] Fix lost API connection logic --- .../org/traccar/client/PositionProvider.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/traccar/client/PositionProvider.java b/app/src/main/java/org/traccar/client/PositionProvider.java index cfdd7c4..e859ce0 100644 --- a/app/src/main/java/org/traccar/client/PositionProvider.java +++ b/app/src/main/java/org/traccar/client/PositionProvider.java @@ -53,6 +53,8 @@ public class PositionProvider implements LostApiClient.ConnectionCallbacks, Loca private Location lastLocation; + private boolean started; + public PositionProvider(Context context, PositionListener listener) { this.context = context; this.listener = listener; @@ -66,6 +68,7 @@ public class PositionProvider implements LostApiClient.ConnectionCallbacks, Loca } public void startUpdates() { + started = true; apiClient = new LostApiClient.Builder(context).addConnectionCallbacks(this).build(); apiClient.connect(); } @@ -84,11 +87,14 @@ public class PositionProvider implements LostApiClient.ConnectionCallbacks, Loca @SuppressLint("MissingPermission") @Override public void onConnected() { - LocationRequest request = LocationRequest.create() - .setPriority(getPriority(preferences.getString(MainFragment.KEY_ACCURACY, "medium"))) - .setInterval(distance > 0 || angle > 0 ? MINIMUM_INTERVAL : interval); - - LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, request, this); + if (started) { + LocationRequest request = LocationRequest.create() + .setPriority(getPriority(preferences.getString(MainFragment.KEY_ACCURACY, "medium"))) + .setInterval(distance > 0 || angle > 0 ? MINIMUM_INTERVAL : interval); + LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, request, this); + } else { + apiClient.disconnect(); + } } @Override @@ -111,9 +117,11 @@ public class PositionProvider implements LostApiClient.ConnectionCallbacks, Loca } public void stopUpdates() { - LocationServices.FusedLocationApi.removeLocationUpdates(apiClient, this); - - apiClient.disconnect(); + if (apiClient.isConnected()) { + LocationServices.FusedLocationApi.removeLocationUpdates(apiClient, this); + apiClient.disconnect(); + } + started = false; } public static double getBatteryLevel(Context context) {