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 à la demande et non répétitive


Sujet :

Android

  1. #1
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 241
    Par défaut Localisation à la demande et non répétitive
    Bonjour,

    J'ai la classe suivante :
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    public class Placement implements LocationListener pour récupérer les informations de localisation : 
    {
        private Double latitude = null;
        private Double longitude = null;
     
        public Placement (LocationManager locationManager)
        {
            if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
            {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
            }
            else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
            {
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 0, this);
            }
            else
            {
                locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 10000, 0, this);    
            }
        }
     
        @Override
        public void onLocationChanged(Location location) {
            latitude = location.getLatitude();
            longitude = location.getLongitude();        
     
            Log.i("Localisation => ", latitude + " - " + longitude);
        }
     
        @Override
        public void onProviderDisabled(String provider) {
     
        }
     
        public Double getLatitude()
        {
            return latitude;
        }
     
        public Double getLongitude()
        {
            return longitude;
        }
     
        @Override
        public void onProviderEnabled(String provider) {
     
        }
     
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            String newStatus = "";
            switch (status) {
            case LocationProvider.OUT_OF_SERVICE:
                newStatus = "OUT_OF_SERVICE";
                break;
            case LocationProvider.TEMPORARILY_UNAVAILABLE:
                newStatus = "TEMPORARILY_UNAVAILABLE";
                break;
            case LocationProvider.AVAILABLE:
                newStatus = "AVAILABLE";
                break;
            }
     
            Log.i("Nouveau statut => ", newStatus);
     
        }    
    }
    ... l'appel se fait dans l'activité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            ...
            LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);        
            new Placement(lm);
     
            ...
        }
    Le soucis est que la recherche de localisation se fait toutes les 10 secondes alors que j'aimerai pouvoir la déclencher à la demande de l'utilisateur ?

    Et là, je n'arrive pas à faire cela ? De plus la recherche de localisation ne peut pas être arrêtée dans ce cas.

    Avez-vous une idée de génie...

    A+

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Utilises requestSingleUpdate() à la place de requestLocationUpdates()...


    a++

  3. #3
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 241
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Utilises requestSingleUpdate() à la place de requestLocationUpdates()...


    a++
    Merci, je vais chercher par là. +1

    Juste une dernière précision : je me rends compte dans de nombreux exemples que la localisation est faite dans l'activité. L'implémentation de cette fonctionnalité n'est pas bloquante pour l'affichage dans ce cas ? Ne faudrait-il pas créer un thread indépendant ?

    Merci encore.

    A+

  4. #4
    Expert confirmé

    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
    Par défaut
    Tout dépends en gros ce qui peut être bloquant en soit c'est le travail que tu va réaliser après la réception de ta nouvelle position, ce travail là lui doit être fait dans un thread si il est lourd. ( du style sauvegarde en BDD de la nouvelle position), si c'est juste un affichage sur l'écran pas besoin de le "threadé".

    Après la gestion de la localisation par l'APK d'Android lui est dans un Thread de base donc te préoccupes pas de cela juste les fonctions de callbacks du manager elle se réaliserons dans le thread qui contiendra l'interface de retour. (LocationListener de mémoire)

  5. #5
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 241
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Après la gestion de la localisation par l'APK d'Android lui est dans un Thread de base donc te préoccupes pas de cela juste les fonctions de callbacks du manager elle se réaliserons dans le thread qui contiendra l'interface de retour. (LocationListener de mémoire)
    Bonjour et merci pour ces explications complémentaires.

    Juste une dernière p'tite question : Comment sais-tu que LocationListener est réalisé dans un thread ? En effet, dans la documentation de l'API android à cette adresse http://developer.android.com/referen...nListener.html je n'ai rien remarqué comme note à ce sujet.


    Pour résumer, j'aimerai savoir comment sais-t-on qu'une classe fournie par android s'exécutera ou non dans un thread ?

    Merci encore.

    A+

  6. #6
    Expert confirmé

    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
    Par défaut
    Juste une dernière p'tite question : Comment sais-tu que LocationListener est réalisé dans un thread ?
    Tu peux regarder dans le code source si tu veux 'est la classe LocationTransport je crois.

    En gros c'est le système qui remonte l'information que cette classes va catché , donc ta puce GPS par exemple qui est elle indépendante de ton thread, elle appartient au système. Comme ci dessous tu trouveras la classes qui fait le lien entre le code de base (C++) et le SDK.
    http://grepcode.com/file/repository....nListener.Stub

    Pour résumer, j'aimerai savoir comment sais-t-on qu'une classe fournie par android s'exécutera ou non dans un thread ?
    Alors c'est pas la classes, mais plus le code. Une classe peut très bien être lié à un thread mais une de ces fonctions à un autre. (l'utilisation des Loopers est un très bon exemple)
    Après pas de magie où est ce que un code s'éxécute c'est soit la documentation, soit le code source, soit le mode debug.


    De base par exemple tu peux dire que toutes les demandes d'informations vers le GPS, Capteurs, et autres sont en communication threadé.

  7. #7
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 241
    Par défaut
    Merci encore.

    A+

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/03/2010, 19h17
  2. Réponses: 3
    Dernier message: 07/06/2006, 13h11
  3. Réponses: 3
    Dernier message: 29/05/2006, 15h27
  4. Problème d'évenement ! Fermeture non demandée.
    Par killprog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/02/2006, 10h18

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