pourquoi getSpeed () renvoie toujours 0 sur android
J'ai besoin d'obtenir la vitesse et du cap à partir du gps. Cependant le nombre que j'ai de location.getSpeed()
est 0 ou parfois pas disponibles. mon code:
String provider = initLocManager();
if (provider == null)
return false;
LocationListener locListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateWithNewLocation(location, interval, startId);
Log.i(getString(R.string.logging_tag), "speed =" + location.getSpeed());
}
public void onProviderDisabled(String provider){
updateWithNewLocation(null, interval, startId);
}
public void onProviderEnabled(String provider) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
_locManager.requestLocationUpdates(provider, interval, DEFAULT_GPS_MIN_DISTANCE, locListener);
private String initLocManager() {
String context = Context.LOCATION_SERVICE;
_locManager = (LocationManager) getSystemService(context);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(true);
criteria.setSpeedRequired(true);
criteria.setCostAllowed(true);
//criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = _locManager.getBestProvider(criteria, true);
if (provider == null || provider.equals("")) {
displayGPSNotEnabledWarning(this);
return null;
}
return provider;
}
J'ai essayé de jouer aux Critères, mais sans succès. Quelqu'un aurait-il une idée de quel est le problème?
source d'informationauteur user591539
Vous devez vous connecter pour publier un commentaire.
emplacement.getSpeed() ne renvoie que ce qui a été défini avec l'emplacement.setSpeed(). C'est une valeur que vous pouvez définir pour un objet d'emplacement.
De calculer la vitesse à l'aide du GPS, vous aurez à faire un peu de mathématiques:
De sorte que vous devez faire:
Tous convertis à ft/sec, ou cependant vous voulez afficher la vitesse. Voilà comment j'ai fait quand j'ai fait un coureur app.
Plus spécifiquement, vous aurez besoin de calculer les distances absolues:
Il pourrait aider à faire un nouveau Dispositif de classe ou de quelque chose, ce qui maintient la position et du temps, il a été pris à l'intérieur.
Il est à mon habitude: LocationListener utilisé pour obtenir la vitesse manuellement et par l'emplacement de l'objet si a la vitesse.
Imbru's réponse l'air vraiment bon, mais il n'est pas très utile si vous travaillez avec des unités.
Voici ce que j'ai fait pour calculer la vitesse en mètres par seconde (m/s).
Sur une planète sphérique distance doit être calculée avec ces formules :
(1) je crois que vous pouvez utiliser le
requestLocationUpdates()
méthode, puis créer un: LocationListener classe avec un onLocationChange méthode définie pour affichergetSpeed()
. C'est de cette façon que j'ai récemment vu qu'il fait avec l'Emplacement.getLatitude et l'Emplacement.getLongitude, je crois donc que vous pouvez simplement utiliser getSpeed() de la même manière, correct?(2) Après la lecture de l'éclipse fenêtre de description, si, je vois qu'il dit exactement ce que la personne précédente a dit: "si hasSpeed() est faux, 0.0 f est retourné."
Mais peut-être que cela aidera à: http://www.ehow.com/how_5708473_convert-latitude-feet.html 🙂
getspeed() fonctionne très bien. Vous n'avez pas à faire le calcul utilisant la formule de la distance. Il est déjà dans getspeed, tant Qu'il y a de la latitude et de la longitude, il y aura une vitesse getspeed.
J'ai aussi rencontré ce problème avant,
J'espère que cela peut vous aider.
Elle renvoie 0 car votre appareil ne peut pas obtenir un verrou sur le GPS, ou ne peut pas se connecter au GPS.
J'ai essayé d'obtenir la vitesse en utilisant une ancienne lenovo appareil et elle renvoie la valeur 0, car il ne peut pas verrouiller sur un gps.
J'ai essayé à l'aide d'un samsung galaxy nexus et il retourne ma vitesse(a un meilleur capteur GPS).
Le capteur GPS de votre téléphone peut ne pas être bon ou vous êtes dans une région qui a un faible signal GPS comme à l'intérieur d'une maison ou d'un bâtiment.
Je basicaslly calculer la vitesse instantanée et ensuite utiliser le setSpeed() la méthode de l'ajouter dans l'emplacement. Son assez précis, car je l'ai comparé à l'intérieur d'un véhicule où j'ai pu vérifier le tachymètre.
getSpeed() la méthode fonctionne réellement bien, mais vous devez utiliser une forte demande intervalle de 1 seconde et vous avez besoin de haute précision, d'abord, je faisais 3 secondes d'intervalle et PRIORITY_BALANCED_POWER_ACCURACY et j'ai gardé l'obtention de valeurs à 0 jusqu'à ce que je le changer comme je l'ai dit. Je suis à l'aide de fusibles fournisseur d'emplacement de l'api.
}