diff options
author | mvglasow <michael@vonglasow.com> | 2015-11-09 15:55:25 +0100 |
---|---|---|
committer | mvglasow <michael@vonglasow.com> | 2015-11-09 15:55:25 +0100 |
commit | 9768ab8641c6ba59d036902617960a995c2f9784 (patch) | |
tree | 90d403783e690c6ed9dd469ebe9fa1f593e7bd16 | |
parent | ffdc3eace672e5cfd59f0a4f0e78cd3e5e3b5d86 (diff) | |
parent | 671ed9c70ad575778d96a085062ab56482719d01 (diff) | |
download | navit-R6338.tar.gz |
Merge pull request #36 from mvglasow/android-network-locationR6338
Add:port_android:Try to use all available location providers on startup
-rw-r--r-- | navit/android/src/org/navitproject/navit/NavitVehicle.java | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/navit/android/src/org/navitproject/navit/NavitVehicle.java b/navit/android/src/org/navitproject/navit/NavitVehicle.java index e42a18470..313502b96 100644 --- a/navit/android/src/org/navitproject/navit/NavitVehicle.java +++ b/navit/android/src/org/navitproject/navit/NavitVehicle.java @@ -19,6 +19,8 @@ package org.navitproject.navit; +import java.util.List; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -148,10 +150,23 @@ public class NavitVehicle { sLocationManager.requestLocationUpdates(preciseProvider, 0, 0, preciseLocationListener); sLocationManager.addGpsStatusListener(preciseLocationListener); - // If the 2 providers are the same, only activate one listener + /* + * Since Android criteria have no way to specify "fast fix", lowCriteria may return the same + * provider as highCriteria, even if others are available. In this case, do not register two + * listeners for the same provider but pick the fast provider manually. (Usually there will + * only be two providers in total, which makes the choice easy.) + */ if (fastProvider == null || preciseProvider.compareTo(fastProvider) == 0) { + List<String> fastProviderList = sLocationManager.getProviders(lowCriteria, false); fastProvider = null; - } else { + for (String fastCandidate: fastProviderList) { + if (preciseProvider.compareTo(fastCandidate) != 0) { + fastProvider = fastCandidate; + break; + } + } + } + if (fastProvider != null) { sLocationManager.requestLocationUpdates(fastProvider, 0, 0, fastLocationListener); } } |