L'obtention de la position GPS actuelle sur Android
Je vais essayer d'obtenir le courant de l'utilisateur grâce à la fonction GPS,
A écrit une simple classe qui implémente LocationListener
public class LocationManagerHelper implements LocationListener {
private static double latitude;
private static double longitude;
@Override
public void onLocationChanged(Location loc) {
latitude = loc.getLatitude();
longitude = loc.getLongitude();
}
@Override
public void onProviderDisabled(String provider) { }
@Override
public void onProviderEnabled(String provider) { }
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
//TODO Auto-generated method stub
}
public static double getLatitude() {
return latitude;
}
public static double getLongitude() {
return longitude;
}
}
et d'une Action simple, je suis l'accès à ces longitude et la latitude des valeurs
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/** create a TextView and write Hello World! */
TextView tv = new TextView(this);
LocationManager mlocManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new LocationManagerHelper();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
mlocListener);
if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
tv.append("Latitude:- " + LocationManagerHelper.getLatitude()
+ '\n');
tv.append("Longitude:- " + LocationManagerHelper.getLongitude()
+ '\n');
} else {
tv.setText("GPS is not turned on...");
}
/** set the content view to the TextView */
setContentView(tv);
Mais il renvoie toujours à 0.0 le résultat.Ne pouvait pas comprendre le problème.
Si vous ne voulez pas écrire beaucoup de code et d'avoir une interface plus simple, utiliser les github.com/delight-im/Android-SimpleLocation
OriginalL'auteur Switch | 2011-02-05
Vous devez vous connecter pour publier un commentaire.
Votre emplacement de mise à jour des rappels ne peut être déclenché qu'après onCreate() retourne. Si vous initialisez votre lat/long des variables à valeurs factices, vous verrez probablement que vous imprimez ces valeurs.
Mettre quelques traces dans votre onLocationChanged de sorte que vous pouvez le voir, c'est d'être congédié, puis de lire un peu sur la façon dont les applications android pour les rappels et mise à jour de l'INTERFACE utilisateur.
Assurez-vous également que votre application dispose des autorisations appropriées dans son manifeste.
OriginalL'auteur Chris Stratton
Emplacement des mises à jour sont en fait asynchrone. Cela signifie que l'API ne pas faire de votre thread appelant attendre jusqu'à ce qu'un nouvel emplacement est disponible ; au lieu de cela vous vous inscrivez à un observateur de l'objet avec une méthode spécifique (rappel) qui est appelée à chaque fois qu'un nouvel emplacement obtient calculée.
Dans le Android LocationManager API, l'observateur est un : LocationListener objet, et la principale fonction de rappel pour l'emplacement des mises à jour est onLocationChanged()
Voici un schéma pour expliquer ce point (espérons que cela aide, plutôt que de vous confondre!)
Donc, à partir de votre code actuel :
Puis lancer l'application et de regarder ce qui se passe dans le logcat. vous verrez que les changements de statut et l'emplacement des mises à jour ne sont pas immédiatement après la demande initiale, ce qui explique pourquoi votre textview montre toujours (0.0,0.0).
Plus: http://developer.android.com/guide/topics/location/obtaining-user-location.html
Vous êtes les bienvenus!
Qui a travaillé.. le journal imprime juste le lon/lat valeurs dans toutes les 30 secondes. Maintenant, je dois obtenir ces valeurs et de mettre à jour l'INTERFACE utilisateur.
OriginalL'auteur Stéphane
Après que vous obtenez mLocListener - définir les Critères comme indiqué ci-dessous
String mlocProvider;
Criteria hdCrit = new Criteria();
hdCrit.setAccuracy(Criteria.ACCURACY_COARSE);
mlocProvider = mlocManager.getBestProvider(hdCrit, true);
et ensuite utiliser getLastKnownLocation
tv.append("\n\nLocations (starting with last known):");
Location currentLocation = mlocManager.getLastKnownLocation(mlocProvider);
Assurez-vous d'avoir dans votre manifeste
uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"
uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
Si vous utilisez l'Émulateur Dans la Perspective DDMS, recherchez l'Emplacement des Contrôles dans l'Émulateur Contrôle onglet. Ensuite, utilisez Manuel onglet pour définir la Longitude et de la Latitude et cliquez sur envoyez - le faire lorsque votre programme est en cours d'exécution, vous voyez un appel à onLocationchanged. C'est une bonne idée d'avoir un journal dans les onLocationChanged.
BTW, les paramètres de requestLocationUpdates sont mis à "... 0,0..." - il va vider votre batterie - j'ai vu le téléphone, allez morts en 6 - 8 heures - il changer "...30000, 100..." - le premier paramètre dans millisec et l'autre est en mètres.
OriginalL'auteur Abhi
Lorsque vous vérifiez sur émulateur, il donnera à 0.0. vous devez passer les emplacements de l'émulateur.
vous pouvez passer ce à partir de C:\android-sdk_r06\android-sdk-windows\tools\ddms.bat fichier.
dans ddms il y a un onglet nommé émulateur de contrôles. à partir de là, vous pouvez passer les emplacements de l'émulateur.
essayez ceci. espérons que cela fonctionnera.
OriginalL'auteur nimi
comment créer des app ?
Obtenir de l'emplacement actuel coordonnées par action (avoir Lieu)
Lat/long
Post l'emplacement sur le serveur pour être affiché sur la carte.(Soumettre)
Bouton effacer pour effacer l'ancien emplacement(Emplacement précis) ou sur (envoyer), il devient clair (0.0.0.0)
L'obtention de la position GPS actuelle sur Android
http://developer.android.com/guide/topics/location/obtaining-user-location.html
OriginalL'auteur sanjay