diff options
author | mvglasow <michael -at- vonglasow.com> | 2015-11-09 15:34:04 +0100 |
---|---|---|
committer | mvglasow <michael -at- vonglasow.com> | 2015-11-09 15:34:04 +0100 |
commit | f3fdb869238475a044628c0fe87cf1eae64ecaf5 (patch) | |
tree | 56ab1f23f1e04872f06e5fd716cda41ea603b208 /navit/android | |
parent | 3ce0f5b4410d98c2f08e7288dcb1c209e3cecdf9 (diff) | |
download | navit-f3fdb869238475a044628c0fe87cf1eae64ecaf5.tar.gz |
Fix:port_android:Try to use all available location providers for first fix
Signed-off-by: mvglasow <michael -at- vonglasow.com>
Diffstat (limited to 'navit/android')
-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..ccaea61f0 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 + /* + * If the two providers are the same, do not enable two listeners. + * Note that Android criteria have no way to specify "fast fix", thus lowCriteria may return the same + * provider as highCriteria, even if others are available. In this case, we have to manually pick one + * of the others. + */ 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); } } |