2017-09-13 3 views
0

Dans mon application Android, j'utilise le cadre osmdroid. Dans le cadre, j'utilise MyLocationNewOverlay() qui contient une méthode pour montrer l'emplacement actuel sur la carte.Obtenir l'emplacement actuel avec le fournisseur de réseau sur osmdroid

Mon problème
Le LocationListener dans le cadre semble ne pas utiliser le fournisseur de réseau et ne veut me trouver avec le GPS (qui fonctionne très bien, mais seulement si je suis à l'extérieur).

Existe-t-il un moyen standard d'utiliser un LocationProvider qui fonctionne également avec le fournisseur de réseau si gps n'est pas disponible?

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

assez standard init mon overlay emplacement:

private void initMyLocationNewOverlay() { 
     myLocationNewOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(context), mapView); 
     myLocationNewOverlay.enableMyLocation(); 
     mapView.getOverlays().add(myLocationNewOverlay); 
    } 

Merci à l'avance!

+1

« nouvelle GpsMyLocationProvider » assez sûr que votre problème est –

+1

Le problème est une classe nommée GpsMyLocationProvider est soit horriblement nommé, ou il utilise uniquement GPS. Recherchez un NetworkMyLocationProvider ou un WifiMyLocationProvider. Heck, regardez le code source - il ne fait qu'ajouter une seule source de données de localisation, et c'est GPS. –

+0

Ah mec, comme c'est embarrassant: le problème était même dans le nom. Je ne pouvais tout simplement plus le voir. Merci! –

Répondre

2

Le problème est que le GpsMyLocationProvider ajoute seulement le GPS_Provider à ses sources (vous pouvez le voir dans le constructeur). Pour ajouter le fournisseur de réseau, utilisez le addLocationSource comme suit.

private void initMyLocationNewOverlay() { 
     GpsMyLocationProvider provider = new GpsMyLocationProvider(context); 
     provider.addLocationSource(LocationManager.NETWORK_PROVIDER); 
     myLocationNewOverlay = new MyLocationNewOverlay(provider, mapView); 
     myLocationNewOverlay.enableMyLocation(); 
     mapView.getOverlays().add(myLocationNewOverlay); 
    } 
+0

Fonctionne parfaitement, merci beaucoup! –