Invité Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 Salut à tous, Bon après mes déboires avec l'émulateur trop long, je rencontre actuellement un autre problème. Je réalise une simple application de type "GPS" qui est censée me renvoyer ma latitude, ma longitude et mon altitude. Le problème est que les coordonnées restent à 0 ! Je précise que je teste tout ça SUR L'EMULATEUR et non sur mon Androphone (qui est au SAV ^^), mais à priori ça devrait fonctionner si j'en crois les retours de certains sites. Je précise également que je n'ai rien bidouillé à l'émulateur, donc si jamais faut qu'il soit connecté au net ou autre, merci de me le préciser, car ça vient peut être de là ^^ Voici donc mon code java, plutôt évident: package com.gps; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.widget.TextView; import android.widget.Toast; public class Hello extends Activity implements OnClickListener,LocationListener { private LocationManager lManager; private Location location; private String choix_source = ""; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Pour le loading requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.main); // On récupère le service de localisation lManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Initialisation de l'écran resetScreen(); // Affectation des écouteurs d'événement findViewById(R.id.choix_source).setOnClickListener(this); findViewById(R.id.obtenir_position).setOnClickListener(this); } // Méthode déclencher au clique sur un bouton public void onClick(View v) { switch (v.getId()) { case R.id.choix_source: getSource(); break; case R.id.obtenir_position: getPos(); break; default: break; } } // Réinitialisation de l'écran private void resetScreen() { ((TextView) findViewById(R.id.latitude)).setText("0.0"); ((TextView) findViewById(R.id.longitude)).setText("0.0"); ((TextView) findViewById(R.id.altitude)).setText("0.0"); findViewById(R.id.obtenir_position).setEnabled(false); } private void getSource() { resetScreen(); // On demande au service la liste des sources disponibles. List<String> providers = lManager.getProviders(true); final String[] sources = new String[providers.size()]; int i = 0; // Stockage for (String provider : providers) sources[i++] = provider; // On affiche la liste des sources dans une fenêtre de dialog new AlertDialog.Builder(Hello.this).setItems(sources, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { findViewById(R.id.obtenir_position).setEnabled(true); // on stock le choix de la source choisi choix_source = sources[which]; // on ajoute dans la barre de titre de l'application le // nom de la source utilisé setTitle(String.format("%s - %s", getString(R.string.app_name), choix_source)); } }).create().show(); } private void getPos() { // Démarrage du loading setProgressBarIndeterminateVisibility(true); lManager.requestLocationUpdates(choix_source, 1000, 0, this); } private void displayLoc() { // On affiche les informations de la position a l'écran ((TextView) findViewById(R.id.latitude)).setText(String .valueOf(location.getLatitude())); ((TextView) findViewById(R.id.longitude)).setText(String .valueOf(location.getLongitude())); ((TextView) findViewById(R.id.altitude)).setText(String .valueOf(location.getAltitude())); } public void onLocationChanged(Location location) { Log.i("Attention", "La position a changé."); setProgressBarIndeterminateVisibility(false); this.location = location; displayLoc(); lManager.removeUpdates(this); } public void onProviderDisabled(String provider) { Log.i("Attention", "La source a été désactivée"); Toast.makeText(Hello.this, String.format("La source \"%s\" a été désactivée", provider), Toast.LENGTH_SHORT).show(); lManager.removeUpdates(this); setProgressBarIndeterminateVisibility(false); } public void onProviderEnabled(String provider) { Log.i("Attention", "La source a été activée."); } public void onStatusChanged(String provider, int status, Bundle extras) { Log.i("Attention", "Le statut de la source a changé."); } } Je vous mets également le fichier du projet en PJ, au cas où vous voudriez tester sur vos Androphones... (sait-on jamais).. Par avance, merci de prendre du temps pour nous aider, nous pauvres ignards ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 As-tu donné les permissions nécessaires (dans le androidManifest.xml) pour ton application ? As-tu poussé des informations GPS auprès de l'émulateur afin qu'il puisse simuler le GPS ? (cf doc) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 Salut et merci de ta réponse. Mon AndoidManifest contient bien les permissions, voici le code: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission> <uses-sdk android:minSdkVersion="3" /> En ce qui concerne le lien que tu m'as donné, je ne comprends pas où le site veut en venir. Si j'ai bien compris ce qu'ils disent, on peut envoyer des coordonnées au GPS de 3 manières différentes, mais moi je veux simplement récupérer des coordonnées... Ai-je mal compris le lien que tu m'as donné ? Cette fois vous trouverez en PJ mon projet... Merci encore une fois. Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 Le lien indiqué fait référence à la façon de donner des données de simulation du GPS, si tu utilises l'émulateur (ce qui est ton cas si j'ai bien suivi). L'émulateur n'a pas de vrai GPS, il doit le simuler, et pour cela, il faut lui fournir des infos, ce qui peut être fait de différentes manières comme l'indique la doc Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 Merci vais essayer EDIT: Ca ne fonctionne pas... Tout reste à 0 alors que je lui envoie une commande geo fix avec des coordonnées... Soit je suis manche, soit y'a un truc dans mon code qui passe pas ^^ Soit les deux :D Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 PS: Si quelqu'un peut tester le projet chez lui, ça pourrait m'être vraiment utile... Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 Cela ne vient pas de ton code, je viens de tester et ça marche (testé sur un vrai téléphone, pas eu le courage d'essayer l'émulateur; localisation via le réseau, parce que pour le GPS, je n'arrive pas à avoir le fix dans la maison) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 1 mars 2011 Share Posté(e) 1 mars 2011 Salut et merci de ta réponse, ça fait plaisir. J'aurai une question si ça ne te dérange pas, lorsque tu cliques sur OBTENIR position et que tu bouges, celle-ci se met-elle à jour "en live" où tu dois recliquer sur obtenir position pour qu'elle le fasse ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 1 mars 2011 Share Posté(e) 1 mars 2011 Salut et merci de ta réponse, ça fait plaisir. J'aurai une question si ça ne te dérange pas, lorsque tu cliques sur OBTENIR position et que tu bouges, celle-ci se met-elle à jour "en live" où tu dois recliquer sur obtenir position pour qu'elle le fasse ? Logiquement elle doit se mettre à jour, mais sait-on jamais.. Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 1 mars 2011 Share Posté(e) 1 mars 2011 La position ne se met pas à jour en continu, puisque une fois obtenue (dans onLocationChanged), tu désenregistres la notification de la mise à jour de la position (via lManager.removeUpdates(this); ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 1 mars 2011 Share Posté(e) 1 mars 2011 Ah bah oui, suis-je bête... Donc en enlevant cette instruction, la MAJ devrait se faire en temps réel c'est bien ça ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 1 mars 2011 Share Posté(e) 1 mars 2011 Oui, cela se mettra à jour lorsque la position change Par contre, dans ce cas, pense à border l'utilisation du LocationManager en désactivant la mise à jour lorsque tu quittes l'Activity (dans le onPause), sinon tu vas avoir des surprises (GPS qui reste activé même après avoir quitté ton application) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.