summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormvglasow <michael@vonglasow.com>2015-11-09 15:55:25 +0100
committermvglasow <michael@vonglasow.com>2015-11-09 15:55:25 +0100
commit9768ab8641c6ba59d036902617960a995c2f9784 (patch)
tree90d403783e690c6ed9dd469ebe9fa1f593e7bd16
parentffdc3eace672e5cfd59f0a4f0e78cd3e5e3b5d86 (diff)
parent671ed9c70ad575778d96a085062ab56482719d01 (diff)
downloadnavit-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.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..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);
}
}