summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormvglasow <michael -at- vonglasow.com>2015-11-09 15:34:04 +0100
committermvglasow <michael -at- vonglasow.com>2015-11-09 15:34:04 +0100
commitf3fdb869238475a044628c0fe87cf1eae64ecaf5 (patch)
tree56ab1f23f1e04872f06e5fd716cda41ea603b208
parent3ce0f5b4410d98c2f08e7288dcb1c209e3cecdf9 (diff)
downloadnavit-f3fdb869238475a044628c0fe87cf1eae64ecaf5.tar.gz
Fix:port_android:Try to use all available location providers for first fix
Signed-off-by: mvglasow <michael -at- vonglasow.com>
-rw-r--r--navit/android/src/org/navitproject/navit/NavitVehicle.java19
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);
}
}