android obtenir l'emplacement du meilleur fournisseur disponible
-
05-10-2019 - |
Question
J'ai ce code pour obtenir le meilleur fournisseur disponible
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new MyLocationListener();
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = lm.getBestProvider(criteria, true);
Location mostRecentLocation = lm.getLastKnownLocation(provider);
if(mostRecentLocation != null) {
latid=mostRecentLocation.getLatitude();
longid=mostRecentLocation.getLongitude();
}
lm.requestLocationUpdates(provider, 1, 0, locationListener);
et l'auditeur
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
if (loc != null) {
latid = loc.getLatitude();
longid = loc.getLongitude();
// if(loc.hasAccuracy()==true){
accuracyd = loc.getAccuracy();
String providershown = loc.getProvider();
accuracy.setText("Location Acquired. Accuracy:"
+ Double.toString(accuracyd) + "m\nProvider: "+providershown);
accuracy.setBackgroundColor(Color.GREEN);
// }
userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid);
submituserlocation(userinfo);
}
}
Quand je l'ai testé à un dispositif (htc magique) J'ai découvert que lorsque le GPS est désactivé, il se bloque à partir du réseau immédiatement. Quand je le GPS, activer ne prend pas toutes les données du réseau et attend jusqu'à ce qu'il se bloque du GPS.
Je voudrais verrouiller la position comme les cartes Google Maps que jusqu'à ce qu'ils aient un bon signal GPS, ils utilisent le réseau pour déterminer ma position.
Je pensais que les meilleurs critères ferait cela, mais ce qu'ils font est de choisir un fournisseur une fois.
Y at-il quelque chose de mal avec mon code ou je dois faire les discussions et les délais d'attente, etc pour y arriver?
La solution
Peut-être que vous pouvez écouter à la fois le fournisseur de réseau et fournisseur GPS pour un certain laps de temps, puis vérifier les résultats des deux. Si vous ne possédez pas les résultats des GPS, utilisez plutôt les résultats du réseau. Voilà comment je l'ai fait.
Autres conseils
Peut-être que vous pouvez utiliser getBestProvider (Criteria criteria, boolean enabledOnly)
de LocationManager
avec des critères comme dans cet autre fil .
Voir documentation officielle .
it helps