From 56e13aa8cfa6e5420d3852a5b4b10bbcecd2f1a3 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 9 Jan 2019 23:16:32 +0100 Subject: [PATCH] NearestFavoriteStationWidgetService: Use 'fused' location provider from Google Play Services, if available. --- .../NearestFavoriteStationWidgetService.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java index 2d440ec..8c162fa 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java +++ b/oeffi/src/de/schildbach/oeffi/stations/NearestFavoriteStationWidgetService.java @@ -60,6 +60,7 @@ import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; +import android.location.LocationProvider; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -121,14 +122,22 @@ public class NearestFavoriteStationWidgetService extends JobIntentService { return; } - // we want to use as little power as possible - final Criteria criteria = new Criteria(); - criteria.setPowerRequirement(Criteria.POWER_LOW); - final String provider = locationManager.getBestProvider(criteria, true); - if (provider == null || LocationManager.PASSIVE_PROVIDER.equals(provider)) { - widgetsMessage(appWidgetIds, getString(R.string.acquire_location_no_provider)); - log.info("No location provider found"); - return; + log.info("Available location providers: {}", locationManager.getAllProviders()); + final String provider; + final LocationProvider fused = locationManager.getProvider("fused"); + if (fused != null) { + // prefer fused provider from Google Play Services + provider = fused.getName(); + } else { + // otherwise, we want to use as little power as possible + final Criteria criteria = new Criteria(); + criteria.setPowerRequirement(Criteria.POWER_LOW); + provider = locationManager.getBestProvider(criteria, true); + if (provider == null || LocationManager.PASSIVE_PROVIDER.equals(provider)) { + widgetsMessage(appWidgetIds, getString(R.string.acquire_location_no_provider)); + log.info("No location provider found"); + return; + } } widgetsHeader(appWidgetIds, getString(R.string.acquire_location_start, provider));