summaryrefslogtreecommitdiff
path: root/navit/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'navit/android/src')
-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);
}
}