IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Probléme sur géolocalisation


Sujet :

API standards et tierces Android

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut Probléme sur géolocalisation
    Bonjour

    Dans une appli je veux ajouter une fonction de géolocalisation pour trouver les commerces situés dans un rayon de 50 kms.

    dans mon manifeste j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <uses-permission android:name="android.permission.INTERNET">
    	</uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
    	</uses-permission>
    	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
    	</uses-permission>
    Je cherche à me localiser, avec ce code qui doit me donner la longitude et la latitude :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    private void obtenirPosition() {
    		//on démarre le cercle de chargement
    		setProgressBarIndeterminateVisibility(true);
    		//On demande au service de localisation de nous notifier tout changement de position
    		//sur la source (le provider) choisie, toute les minutes (60000millisecondes).
    		//Le paramètre this spécifie que notre classe implémente LocationListener et recevra
    		//les notifications.
    		lManager.requestLocationUpdates(choix_source, 60000, 0, this);
    	}
     
    	private void afficherLocation() {
    		//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()));
    	}
    j'ai ajouté un témoin de recherche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //On spécifie que l'on va avoir besoin de gérer l'affichage du cercle de chargement
            requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    Quand je lance l'appli la recherche s'effectue mais je n'ai pas d'affichage de la position. Est-ce normal ?

    Merci pour vos réponses

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour ,

    Comment récupères tu la variable location ?

    Je te met un exemple

    http://developer.android.com/guide/t...-location.html
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse, mais avec cette modif, cela ne change rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void obtenirPosition() {
    		//On récupère le service de localisation
            lManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            reinitialisationEcran();
    		//on démarre le cercle de chargement
    		setProgressBarIndeterminateVisibility(true);
    		//On demande au service de localisation de nous notifier tout changement de position
    		//sur la source (le provider) choisie, toute les minutes (60000millisecondes).
    		//Le paramètre this spécifie que notre classe implémente LocationListener et recevra
    		//les notifications.
    		lManager.requestLocationUpdates(choix_source, 60000, 0, this);
    	}

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Dans l'exemple que tu m'indiques

    makeUseOfNewLocation est surligné et le code me demande de creer la méthode
    Cette méthode elle contient quoi ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 61
    Points : 50
    Points
    50
    Par défaut
    Salut,

    il me semble que la méthode requestLocationUpdates() que ton LocationManager appel, prend également en paramètres la distance minimale en mètres.(le 3ème paramètres)

    essaye de mettre une autre valeur que 0.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Comme cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //On récupère le service de localisation
        			        lManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        			        setProgressBarIndeterminateVisibility(true);
     
        					// Define a listener that responds to location updates
        					LocationListener locationListener = new LocationListener() {
        					    public void onLocationChanged(Location location) {
        					      // Called when a new location is found by the network location provider.
        					      makeUseOfNewLocation(location);
        					    }
     
    							public void onStatusChanged(String provider, int status, Bundle extras) {}
        					    public void onProviderEnabled(String provider) {}
        					    public void onProviderDisabled(String provider) {}
        					  };
        					// Register the listener with the Location Manager to receive location updates
        					  lManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 0, locationListener);
        					longitude = (String.valueOf(location.getLongitude()));
        					latitude=(String.valueOf(location.getLatitude()));
        					}       
        				})

  7. #7
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Dans l'exemple que je t'ai donnée makeUseOfNewLocation correspond à une procédure que tu peux créer qui traitera de la location obtenue .

    C'est pour ça que je t'ai demandé comment tu obtenais ta location ?
    Comment récupères tu la variable location ?
    Ta location tu la récupère dans le listener comme tel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // Define a listener that responds to location updates
    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
          // Called when a new location is found by the network location provider.
          // la tu apelles la fonction de traitement de la location 
         // pour ton cas le refresh sur tes textviews
          makeUseOfNewLocation(location);
        }
     
        public void onStatusChanged(String provider, int status, Bundle extras) {}
     
        public void onProviderEnabled(String provider) {}
     
        public void onProviderDisabled(String provider) {}
      };

    EDIT : oui.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Ok, je n'avais pas compris
    Sur le tuto qui m'a servi à faire mon code, j'ai un bouton pour afficher les résultats :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void afficherLocation() {
    		//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()));
    	}
    Mais sur mon appli je veux seulement récuperer les coordonnées pour de localisation, pour ensuite faire une requete sur une table SQLite et rechercher les enregistrements situés dans un rayon de 50 kms

    C'est pas possible ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Comme cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void makeUseOfNewLocation(Location location) {
    laLongitude=(Double.valueOf(location.getLongitude()));
    laLatitude=(Double.valueOf(location.getLatitude()));
     }

  10. #10
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Bonjour,

    Quel est votre niveau en Java ?
    Au début, vous utilisiez une variable qui n'avait pas l'air d'être initialisée...

    Maintenant vous créez des méthodes pour faire des calculs qui ne sont pas cohérents avec le reste de votre code.

    Dans votre cas l'algorithme est simple.
    Vous initialisez votre interface. Puis vous lancez une méthode qui demande au téléphone de récupérer la position GPS. Cette méthode va "claquer" un évènement pour vous indiquez lorsque la position GPS aura été trouvée.
    Il ne vous restera alors plus qu'a afficher cette localisation (via une méthode ou directement dans votre "listener").
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Il ne vous restera alors plus qu'a afficher cette localisation
    Directement dans mon listener, comment et où j'écris les résultats ?

  12. #12
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Comme l'a indiqué Feanorin dans son post précédent. Il l'a fait en appelant une méthode (dans laquelle il suppose que tu actualises tes champs textes sur l'interface).
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Comme cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    .setPositiveButton("Oui", new DialogInterface.OnClickListener() {           
            	public void onClick(DialogInterface dialog, int id) {                
                  //On récupère le service de localisation
                    lManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                  //on démarre le cercle de chargement
            		setProgressBarIndeterminateVisibility(true);
            		LocationListener locationListener = new LocationListener() {
            		    public void onLocationChanged(Location location) {
            		    	makeUseOfNewLocation(location);
            		    }
            		  private void makeUseOfNewLocation(Location location) {
            		    	((TextView)findViewById(R.id.latitude)).setText("0.0");
            				((TextView)findViewById(R.id.longitude)).setText("0.0");
    				}
    					public void onStatusChanged(String provider, int status, Bundle extras) {}
            		    public void onProviderEnabled(String provider) {}
            		    public void onProviderDisabled(String provider) {}
            		  };
            		}       
            	})

  14. #14
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Pas vraiment, mais tu t'en rapproches.
    Tu n'utilises jamais ton listener et dans ta méthode pour afficher, tu ne te sers pas de ta variable "location", et ta méthode pour afficher devrait être en dehors de ton listener.

    T'avais presque tout bon ici :
    http://www.developpez.net/forums/d10...n/#post5793129

    Il te manquait juste la méthode d'affichage.
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Il me faut ajouter cette ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lManager.requestLocationUpdates("gps", 60000, 0, this);

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    J'ai corrigé mon code, mais je n'ai pas d'affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    private void obtenirPosition() {
    		setProgressBarIndeterminateVisibility(true);
    		// On récupère le service de localisation
    		lManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    		LocationListener locationListener = new LocationListener() {
    			private Location location;
    			public void onLocationChanged(Location location) {
    				//Lorsque la position change...
    				Log.i("Géolocalisation", "La position a changé.");
    				//on stop le cercle de chargement
    				setProgressBarIndeterminateVisibility(false);
    				//on sauvegarde la position
    				this.location = location;
    				//... on l'affiche
    				afficherLocation();
    				//... et on spécifie au service que l'on ne souhaite plus avoir de mise à jour
    				lManager.removeUpdates(this);
    			}
    			public void onStatusChanged(String provider, int status, Bundle extras) {
    				Log.i("Géolocalisation", "Le statut de la source a changé.");
    			}
    		    public void onProviderEnabled(String provider) {
    		    	Log.i("Géolocalisation", "La source a été activé.");
    		    }
    		    public void onProviderDisabled(String provider) {
    		    	//Lorsque le GSP est désactivé
    				Log.i("Géolocalisation", "La source a été désactivé");
    				//...on affiche un Toast pour le signaler à l'utilisateur
    				Toast.makeText(okgeolocalise.this,
    						String.format("Le GPS a été désactivé", provider),
    						Toast.LENGTH_SHORT).show();
    				//on spécifie au service que l'on ne souhaite plus avoir de mise à jour
    				lManager.removeUpdates(this);
    				//on stop le cercle de chargement
    				setProgressBarIndeterminateVisibility(false);
    		    }
    		};
    		lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 0, locationListener);
    	}
    	private void afficherLocation() {
    		//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()));
    	}
    Je ne vois vraiment pas pourquoi

  17. #17
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Alors , c'est normal que l'affichage ne marche pas car tu déclares ta variable location dans le listener , puis tu l'utilise dans la procédure afficherposition qui elle n'a pas accès à cette variable .

    essaye plutôt comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    private void obtenirPosition() {
    		setProgressBarIndeterminateVisibility(true);
    		// On récupère le service de localisation
    		lManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    		LocationListener locationListener = new LocationListener() {
    			public void onLocationChanged(Location location) {
    				//Lorsque la position change...
    				Log.i("Géolocalisation", "La position a changé.");
    				//on stop le cercle de chargement
    				setProgressBarIndeterminateVisibility(false);
    				//on sauvegarde la position
    				//... on l'affiche
    				afficherLocation(location);
    				//... et on spécifie au service que l'on ne souhaite plus avoir de mise à jour
    				lManager.removeUpdates(this);
    			}
    			public void onStatusChanged(String provider, int status, Bundle extras) {
    				Log.i("Géolocalisation", "Le statut de la source a changé.");
    			}
    		    public void onProviderEnabled(String provider) {
    		    	Log.i("Géolocalisation", "La source a été activé.");
    		    }
    		    public void onProviderDisabled(String provider) {
    		    	//Lorsque le GSP est désactivé
    				Log.i("Géolocalisation", "La source a été désactivé");
    				//...on affiche un Toast pour le signaler à l'utilisateur
    				Toast.makeText(okgeolocalise.this,
    						String.format("Le GPS a été désactivé", provider),
    						Toast.LENGTH_SHORT).show();
    				//on spécifie au service que l'on ne souhaite plus avoir de mise à jour
    				lManager.removeUpdates(this);
    				//on stop le cercle de chargement
    				setProgressBarIndeterminateVisibility(false);
    		    }
    	};
    		lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 0, locationListener);
    }
     
     
    private void afficherLocation(Location location) {
    		//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()));
    }

    Après en faisant un remove sur ton listener tu perds le cycle de l'obtention des position de géolocalisation , est -ce voulue ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lManager.removeUpdates(this);
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    J'ai supprimé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lManager.removeUpdates(this);
    J'ai corrigé mon code comme tu me l'indique
    Cela tourne mais rien ne s'affiche

    Si je mets un point d'arret sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void afficherLocation(Location location)
    Et que je lance le debugger, on arrive pas sur ce point
    Est-ce normal ?

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  2. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 08h07
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo