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

Android Discussion :

Localisation


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 6
    Par défaut Localisation
    Bonjour,
    Deux jour que je coince sur ce "petit" morceau de code...
    En bref, je désire réaliser une mini-interface avec un bouton et une zone texte (TextView), l'objectif étant de modifier le texte de la zone après chaque clic de sorte à y retrouver les coordonnées de la position de l'appareil mobile.

    Pour faire, j'ai insérer les permissions qu'il faut (dans l'xml manifest), ensuite, j'ai une classe (une Activity) Form1Activity dont voici le code :

    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
    46
    47
    48
    49
    50
    51
     
    package com.example.form_one;
     
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
     
    public class Form1Activity extends Activity {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_form1);
    		initialize();
    	}
     
    	protected void initialize() {
    		Button bLocalization = (Button) findViewById(R.id.bLocalization);
     
    		//Code de géolocalisation 
    		final LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    		//Fin du code pour géolocalisation
     
    		bLocalization.setOnClickListener(new View.OnClickListener() {
    			TextView textLocalization = (TextView)findViewById(R.id.textLocalization);
    			Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
     
    			@Override
    			public void onClick(View v) {
     
    				textLocalization.setText(""+location.getLatitude()+"\n"+location.getLongitude());
     
    				}	
    		});
     
    }
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.form1, menu);
    		return true;
    	}
     
    }
    Lorsque je teste, ça me renvoie un message d'erreur ("Unfortunatly, form_one has stopped").

    J'ai aussi tester avec LocationListener, same result there...
    Merci de m'indiquer la source d'erreur.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    getLastKnownLocation peut renvoyer "null" (aucune location récente).

    Donc le "location.getLatitude()" va crasher avec un NullPointerException.


    De toute manière il est illusoire de penser pouvoir en "un clic" récupérer une position GPS.
    Il y avait un article chez google qui traitait justement de comment fonctionne le LocationManager... mais grosso modo, même si dans les settings "GPS" est activé, le capteur GPS n'est pas réellement actif, il est juste rendu disponible pour les applications. Il ne sera activé que si une application "active" (voir la définition de ce terme dans la durée de vie des applications) est en train d'écouter la localisation GPS. (avec un listener donc). Ceci pour éviter le drain de batterie inhérent à ce capteur.

    Et comme un fix GPS peut prendre un certain temps (de 2s à 30s), une activité ayant besoin d'une position va demander à écouter les infos GPS dès son activation (gestion du listener dans onResume/onPause)...
    Il n'y a d'ailleurs (à juste escient) aucune fonction bloquante de récupération de la position actuelle.

    C'est pourquoi en général, il n'y a pas besoin de "clic"... l'activité tournant, elle peut afficher la position en temps réel, sans une quelconque action de l'utilisateur.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 6
    Par défaut
    Citation Envoyé par nicroman Voir le message
    getLastKnownLocation peut renvoyer "null" (aucune location récente).

    Donc le "location.getLatitude()" va crasher avec un NullPointerException.


    De toute manière il est illusoire de penser pouvoir en "un clic" récupérer une position GPS.
    Il y avait un article chez google qui traitait justement de comment fonctionne le LocationManager... mais grosso modo, même si dans les settings "GPS" est activé, le capteur GPS n'est pas réellement actif, il est juste rendu disponible pour les applications. Il ne sera activé que si une application "active" (voir la définition de ce terme dans la durée de vie des applications) est en train d'écouter la localisation GPS. (avec un listener donc). Ceci pour éviter le drain de batterie inhérent à ce capteur.

    Et comme un fix GPS peut prendre un certain temps (de 2s à 30s), une activité ayant besoin d'une position va demander à écouter les infos GPS dès son activation (gestion du listener dans onResume/onPause)...
    Il n'y a d'ailleurs (à juste escient) aucune fonction bloquante de récupération de la position actuelle.

    C'est pourquoi en général, il n'y a pas besoin de "clic"... l'activité tournant, elle peut afficher la position en temps réel, sans une quelconque action de l'utilisateur.
    D'abord merci d'avoir répondu.
    Pour ce qui est du mode de fonctionnement du GPS, je peux comprendre que le problème prenne place sur des vraies machines, mais dans mes tests j'ai aussi recouru au SDK et à l'émission d'une position par l'émulateur, donc je ne pense pas que ce soit inhérent au GPS.

    Je comprends que mon application n'a pas un vrai use case background, c'est juste pour l'apprentissage, mais je ne vois par pourquoi ça marcherait pas (quoique, pour vous dire, je voulais permettre à un collecteur qui utilise un formulaire de voir ses positions avant de les envoyer...).

    Devrais-je finalement retenir que la méthode où mon code devrait être implémenté est onResume et non onCreate ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Akheloes Voir le message
    Pour ce qui est du mode de fonctionnement du GPS, je peux comprendre que le problème prenne place sur des vraies machines, mais dans mes tests j'ai aussi recouru au SDK et à l'émission d'une position par l'émulateur, donc je ne pense pas que ce soit inhérent au GPS.
    Cela ne fait pas de différence...
    Un envoi de position à l'émulateur, revient à l'envoi d'une position au système GPS *SI IL EST ALLUME* (cad si quelqu'un l'écoute), ce qui n'est pas le cas par défaut (pas de petit "rond" dans la barre de statut ?)
    Je comprends que mon application n'a pas un vrai use case background, c'est juste pour l'apprentissage, mais je ne vois par pourquoi ça marcherait pas
    Ben... j'ai expliqué pourquoi
    Devrais-je finalement retenir que la méthode où mon code devrait être implémenté est onResume et non onCreate ?
    Heu... non puisque le code n'est pas implémenté !

    Pendant le onCreate, on crée une classe anonyme (new View.OnClickListener() { /* classe anonyme */ }), qui contient deux variables membres:
    textLocalization (initialisé à la construction à une vue)
    location (initialisée à la construction à la dernière position GPS connue).
    Puis on passe cette classe au bouton.

    A aucun moment on ne demande à écouter la localisation, pire encore, un click sur le bouton ne fera qu'utiliser les données obtenues à la construction (pendant le onCreate()), probablement nulles (voir premier message pourquoi), et jamais mises à jour.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 6
    Par défaut
    Hum...
    Y a certainement matière pour bricoler maintenant, je vais essayer de creuser dans les pistes indiquées et ferai par suite un retour d'expérience (en espérant que je puisse venir à terme de mon calvaire ).

    Merci

Discussions similaires

  1. Réponses: 19
    Dernier message: 31/10/2005, 15h04
  2. [VB6] Localiser un dossier spécial de Windows
    Par Rohan Michel dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 05/10/2004, 08h20
  3. Localisation d'une base Postgresql sur mdk 9.1
    Par Gregco dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 10/06/2003, 18h46

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