From ac6d677ff45d3581c1b4ea16f41cb517a21d8398 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 18 Oct 2018 15:41:44 +1300 Subject: [PATCH] Explicitly select location providers --- .../org/traccar/client/PositionProvider.java | 30 +++---------- .../org/traccar/client/ShortcutActivity.java | 44 +++++++++---------- 2 files changed, 27 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/org/traccar/client/PositionProvider.java b/app/src/main/java/org/traccar/client/PositionProvider.java index 9362db0..549fe99 100644 --- a/app/src/main/java/org/traccar/client/PositionProvider.java +++ b/app/src/main/java/org/traccar/client/PositionProvider.java @@ -20,16 +20,13 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; -import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.BatteryManager; import android.os.Bundle; -import android.os.Looper; import android.preference.PreferenceManager; import android.util.Log; -import android.widget.Toast; public class PositionProvider implements LocationListener { @@ -70,33 +67,20 @@ public class PositionProvider implements LocationListener { @SuppressLint("MissingPermission") public void startUpdates() { - try { - locationManager.requestLocationUpdates( - distance > 0 || angle > 0 ? MINIMUM_INTERVAL : interval, 0, - getCriteria(preferences.getString(MainFragment.KEY_ACCURACY, "medium")), - this, Looper.myLooper()); - } catch (RuntimeException e) { - Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show(); - } + locationManager.requestLocationUpdates( + getProvider(preferences.getString(MainFragment.KEY_ACCURACY, "medium")), + distance > 0 || angle > 0 ? MINIMUM_INTERVAL : interval, 0, this); } - public static Criteria getCriteria(String accuracy) { - Criteria criteria = new Criteria(); + public static String getProvider(String accuracy) { switch (accuracy) { case "high": - criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); - criteria.setPowerRequirement(Criteria.POWER_HIGH); - break; + return LocationManager.GPS_PROVIDER; case "low": - criteria.setHorizontalAccuracy(Criteria.ACCURACY_LOW); - criteria.setPowerRequirement(Criteria.POWER_LOW); - break; + return LocationManager.PASSIVE_PROVIDER; default: - criteria.setHorizontalAccuracy(Criteria.ACCURACY_MEDIUM); - criteria.setPowerRequirement(Criteria.POWER_MEDIUM); - break; + return LocationManager.NETWORK_PROVIDER; } - return criteria; } @Override diff --git a/app/src/main/java/org/traccar/client/ShortcutActivity.java b/app/src/main/java/org/traccar/client/ShortcutActivity.java index d62eb9b..48ec1f4 100644 --- a/app/src/main/java/org/traccar/client/ShortcutActivity.java +++ b/app/src/main/java/org/traccar/client/ShortcutActivity.java @@ -108,35 +108,31 @@ public class ShortcutActivity extends AppCompatActivity { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); - Criteria criteria = PositionProvider.getCriteria( + String provider = PositionProvider.getProvider( preferences.getString(MainFragment.KEY_ACCURACY, "medium")); - try { - Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, true)); - if (location != null) { - sendAlarmLocation(location); - } else { - locationManager.requestSingleUpdate(criteria, new LocationListener() { - @Override - public void onLocationChanged(Location location) { - sendAlarmLocation(location); - } + Location location = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); + if (location != null) { + sendAlarmLocation(location); + } else { + locationManager.requestSingleUpdate(provider, new LocationListener() { + @Override + public void onLocationChanged(Location location) { + sendAlarmLocation(location); + } - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { - } + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + } - @Override - public void onProviderEnabled(String provider) { - } + @Override + public void onProviderEnabled(String provider) { + } - @Override - public void onProviderDisabled(String provider) { - } - }, Looper.myLooper()); - } - } catch (RuntimeException e) { - Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); + @Override + public void onProviderDisabled(String provider) { + } + }, Looper.myLooper()); } }