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 :

Récupération de coordonnées GPS dans le onCreate


Sujet :

API standards et tierces Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Récupération de coordonnées GPS dans le onCreate
    Bonjour/bonsoir à tous.

    Je dois, dans le cadre de mes études, réaliser une application de "chasse au trésor".

    En clair, lors du lancement de l'application, des points géographiques sont choisis et l'utilisateur doit accéder au premier point pour que le deuxième lui soit indiquer, accéder au 2ème pour que le 3ème lui soit indiqué ...

    J'aurais aimé savoir s'il était possible de récupérer les coordonnées GPS du lieu où l'on se trouve directement dans le onCreate de mon appli android ? Cela dans le but de me permettre de jouer dans n'importe quel lieu (actuellement, ma liste de point est uniquement choisie dans les alentours de ma fac).

    Merci d'avance pour vos réponses.

  2. #2
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non... il n'y a pas de certitude d'avoir un point de localisation dans le onCreate

    Il est possible de demander "la dernière position connue", et ne rien avoir en retour du tout.
    Et bien sur, il est interdit d'attendre un positionnement (le temps de 'fix' pouvant être assez important) dans le fonction onCreate.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Le onCreate va te servir essentiellement à mettre en place ton gestionnaire de position et à choisir ton fournisseur de position (GPS ici). Il existe effectivement une méthode pour renvoyer la dernière position connue mais elle peut renvoyer null. Dans ton cas de chasse au trésor, il y a un mécanisme parfaitement adapté : les alertes de proximité.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    locationManager.addProximityAlert(...);
    L'alerte se déclenchera lorsque l'utilisateur s'approchera des points d'intérêt ("les trésors") que tu aura définis. Un broadcastReceiver te servira à exécuter du code suite à ces alertes.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonsoir.

    Tout d'abord merci de vos réponses =).

    J'avais entendu parler du getLastKnownPosition (enfin je crois qu'elle s'appelle comme ça ^^) mais elle ne correspond pas tout à fait à ce que je veux.

    Ensuite, concernant les addProximityAlert, c'est ce que je vais effectivement utiliser pour "parcourir" mes points. Mais je n'en suis pas encore là pour le moment.

    Tant pis alors, va falloir que je fasse tourner ma caboche pour essayer de rendre le jeu jouable n'importe où ^^ (enfin ce serait juste un bonus)

  5. #5
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non mais c'est le truc classique....


    Lancement de l'appli...
    Arrivée dans le onCreate
    On démarre tout de suite le location-manager pour recevoir les updates
    Partie en cours ? on reprends les points précédents (option de 'nouvelle partie')
    Partie pas en cours ? on met un gros bouton "nouvelle partie".

    Dans le cas d'une nouvelle partie, on attend d'avoir une position (avec une jolie progress dialog le temps de), et pouf, on a la position.
    En général entre le moment du onCreate et l'action de démarrage de la partie, on a le temps de récupérer une ou deux positions.. (surtout si on demande un positionnement "loose" basé sur les antennes 3G).

    Le pseudo 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
     
    public void onCreate()
    {
       this.locationManager = ...;
       this.lastKnownPosition = this.locationManager.getLastKnownPosition();
       this.locationManager.registerForUpdate(this);
     
       this.game = loadCurrentgame();
       if (this.game == null) {
           // display new game button
       } else {
           // register proximity alert for next point
       } 
    }
     
    public void onPosition(position pos)
    {
       this.lastKnownPosition = pos;  /// bon c'est un poil plus compliqué pour des histoire de "qualité", mais tout le code est dans la doc de LocationManager
       if (this.waiting) {
           dismissProgress();
           onStartGame();
       }
    }
     
    public void onNewGame()
    {
        if (this.lastKnownPosition == null) {
            showProgress();
            this.waiting = true;
       } else
            onStartGame();
    }
     
    public void onStartGame()
    {
        // ici this.lastKnownPosition est ok !
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Encore merci pour ta réponse

    (Désolé, étant alternant, je n'ai pas forcément le temps lors de mes semaines d'entreprise de regarder mes projets de fac ...).

    Merci beaucoup aussi pour le principe, je pense l'avoir compris, je vais voir pour la mettre en place

    Par contre, j'ai fait quelques recherches pour les addProximityAlert.

    Mais je n'arrive pas à voir comment les faire fonctionner ...

    En gros, j'ai une liste de 4 points à atteindre. À l'initialisation, le programme récupère le premier de ces 4 points, on y ajoute un addProximityAlert et lorsqu'on arrive à 30m du point, on doit l'indiquer au joueur et passer au point d'après.

    Mais le problème, c'est que je ne sais pas vraiment à quel élément appliquer mon addProximityAlert ... au GeoPoint ? à l'overlayItem ?
    Et encore pire, comment on peut savoir justement que l'addProximityAlert a "été activée" afin de passer au point d'après ?

    Désolé de toutes mes questions, je suis assez novice sous Android et de plus, étant donné que j'ai plusieurs TPs je ne peux pas me concentrer à 100% sur l'un ou l'autre :/

  7. #7
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par thefranchise Voir le message
    Mais le problème, c'est que je ne sais pas vraiment à quel élément appliquer mon addProximityAlert ... au GeoPoint ? à l'overlayItem ? Et encore pire, comment on peut savoir justement que l'addProximityAlert a "été activée" afin de passer au point d'après ?
    Je l'ai déjà plus ou moins expliqué. La méthode addProximityAlert s'invoque sur ton locationManager. En gros, elle prend en entrée latitude/longitude, un rayon d'action, ainsi qu'un Intent. C'est cet intent qui sera diffusé automatiquement lorsque la position courante entrera dans le rayon d'action, et qui sera donc récupéré par un broadcastReceiver.

    Donc, au lancement de l'application ton boulot est juste d'ajouter une première alerte de proximité pour ton trésor 1. Lorsque le brodcastReceiver est déclenché, tu sais que la personne vient de rentrer dans la zone du premier trésor. Donc il te suffit de retirer l’alerte et de la remplacer par une alerte pour le trésor 2, et ainsi de suite jusqu'à la fin. Dis autrement, toute ta logique de chasse au trésor (trésor 1 puis trésor 2 etc.) est contenu dans le code de ton BroadcastReceiver.

    [Pour les puristes]L'idée est d'appliquer le pattern "Etat" du GoF où le contexte est ici la classe d'implementation du BroascastReceiver[/Pour les puristes]
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Je me suis souvenu que je n'avais pas posté ma réponse

    Je n'ai finalement pas pu rendre le jeu jouable partout, faute de temps - trop de TPs.
    Mais le jeu était parfaitement jouable à l'aide des alertes de proximité et/ou de lectures de QRCodes.

    Merci pour toutes les explications
    Bon dimanche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Récupération des coordonnées GPS
    Par thierrybatlle dans le forum WinDev
    Réponses: 6
    Dernier message: 08/01/2016, 12h11
  2. [Google Maps] Déterminer si une coordonnée GPS se situe dans un polygone
    Par dumoulex dans le forum APIs Google
    Réponses: 8
    Dernier message: 04/01/2014, 23h07
  3. Récupération des coordonnés d'un clique dans un tableau dynamique?
    Par Monaliza-fst dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/03/2010, 22h49
  4. Réponses: 1
    Dernier message: 24/11/2008, 12h59
  5. Réponses: 1
    Dernier message: 27/10/2008, 07h28

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