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 :

La géolocalisation Android + adresse


Sujet :

API standards et tierces Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 66
    Par défaut La géolocalisation Android + adresse
    Bonjour à tous,

    Je suis débutant en programmation Android et j'ai un exercice d'un professeur avec la correction sauf que le code de la correction ne marche pas sur mon IDE Android Studio, le professeur n'utilise pas Android Studio alors il ne sait pas qu'est ce qui provoque le problème. J'utilise cet exercice car je dois rendre un projet d'application complète et j'aurais aimé utilisé cette localisation mais comme ça ne marche pas, je viens vers vous car sur le net je ne trouve que des vieux codes qui produisent le même type d'erreur (sûrement un problème de version du SDK minimum ou de version de compilation).
    Visiblement j'ai démarré mon projet avec un SDK minimum en 4.3 (API 18) mais lorsque je compile ça compilerait avec la version 7.0, et même si je recrée un projet ça ne me demande pas la version du compilateur, du coup j'ai installé le pack pour compiler en version 4.4 et lorsque je change la classe R disparait et du coup plein d'erreurs se produisent. Donc j'ai voulu supprimer la version 7.0 mais la erreur interne de l'IDE alors je n'y touche pas non plus.

    Le but de l'exercice étant que lorsque nous cliquons sur un bouton "Position", la position de l'utilisateur s'affiche dans un Toast.
    (D'ailleurs j'aimerais faire afficher l'adresse exacte plutôt que seulement la position dans un EditText, mais on pourra voir cela plus tard).

    Je vais poster le code du professeur avec les commentaires sur le site mais si on résout le problème je le supprimerais car si le professeur tombe dessus ça fait mauvais genre vous croyez pas?

    Code Java :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
    import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.content.pm.ResolveInfo;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    import java.util.List;
     
    /*
     * L'activité OuSuiJE permet de mettre en œuvre le service de localisation
     * d'android.
     */
    public class ActiviteOuSuisJe extends Activity
    {
    /*
     * On garde une référence vers le LocationManager et vers le listener qui sera à
     * l'écoute des changements de localisation.
     */
      private LocationManager lm;
      private LocationListener ll;
    /*
     * Nous gardons aussi une référence vers le bouton de notre interface pour
     * contrôler son état d'activation.
     */
      private Button btn;
     
      @Override
      public void onCreate(final Bundle b){
        super.onCreate(b);
        this.setContentView(R.layout.ex3_main);
    /*
     * On récupère une référence vers le bouton de notre interface.
     */
        this.btn = (Button)this.findViewById(R.id.ex3_main_btn);
    /*
     * On récupère une référence vers le LocationManager grace à «l'appel système
     * android» getSystemService().
     */
        this.lm = (LocationManager)this.getSystemService(LOCATION_SERVICE);
    /*
     * On définit ensuite un objet de type LocationListener en implantant ses 4
     * méthodes
     */
        this.ll = new LocationListener() {
    /*
     *  En fait, seule la première méthode nous intéresse dans cet exemple.
     */
                @Override
                public void onLocationChanged(final Location loc) {
    /*
     * Cette méthode récupère la Localisation et on la passe à une méthode
     * utilisataire privée. Pour la traiter.
     */
                  analyseLocation(loc);
    /*
     * On en profite pour réactiver le bouton puisqu'une position a été trouvée.
     */
                  btn.setEnabled(true);
                }
                @Override
                public void onStatusChanged(String arg0, int arg1, Bundle arg2){}
                @Override
                public void onProviderEnabled(String arg0){}
                @Override
                public void onProviderDisabled(String arg0){}
              };
      }
    /*
     * Cette méthode utilitaire prend en paramètre un objet Location. À partir de
     * cet objet Location on crée une URI geo qui identifiera la donnée d'un Intent
     * implicite portant l'action VIEW. Cet intent sera  utilisé pour démarrer une
     * activité de capable d'afficher la position géographique.
     * Comme les applications de cratographie sous Android ne sont pas standard, un
     * téléphone peut très bien ne pas avoir une telle application et dans ce cas
     * startActity() lèvera une Exception, pour éviter cela on utilise le
     * PackageManager.
     */
      private void analyseLocation(final Location l){
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:"
                                            +l.getLatitude()+","+l.getLongitude()));
    /*
     * Il n'y a pas en standard dans l'environnement Android d'application
     * de visualisation cartographique. L'application Google Maps que l'on
     * retrouve installé sur la plupart des telephone Android est la
     * propriete de Google et donc n'existe pas en standard sur le
     * simulateur. Il est donc recommande de verifier la presence d'une
     * activite cartographique avant de faire le startActivity pour eviter
     * une exception.
     */
        PackageManager packageManager = getPackageManager();
        List<ResolveInfo> activities = packageManager.queryIntentActivities(i, 0);
        if(activities.size() > 0){
          this.startActivity(i);
        }
      }
    /*
     * La méthode ouSuisJe est appélée par le UIThread chaque foid que l'utilisateur
     * clique sur le bouton de notre interface graphique. (attribut onClick dans le
     * fichier XML).
     */
      public void ouSuisJe(final View v){
    /*
     * On commence par interroger le LocationManager pour voir si une position est
     * déjà connue, grace à la méthode gegetLastKnownLocation(). Comme on ne demande
     * pas une information nouvelle, nous allons utiliser le PASSIVE_PROVIDER pour
     * récupérer notre info.
     */
        final Location l = this.lm.getLastKnownLocation(
                                                  LocationManager.PASSIVE_PROVIDER);
    /*
     * Si l'information n'existe pas ou qu'elle a plus d'une heure, on en redemande
     * une plus fraiche au système.
     */
        if(null == l || (System.currentTimeMillis()-l.getTime() > 3600e3)){
          Toast.makeText(this, "On demande une nouvelle info ("+l
                                                       , Toast.LENGTH_LONG).show();
          v.setEnabled(false);
    /*
     * On enregistre le listener pour une acquisition de position en s'appuyant sur
     * le GPS.
     */
          this.lm.requestSingleUpdate(LocationManager.GPS_PROVIDER, ll, null);
        }
        else{
          Toast.makeText(this, "uses last known location", Toast.LENGTH_LONG).show();
          this.analyseLocation(l);
        }
      }
    }
    layout.xml:
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Position"
            android:hint="Position :"
            android:onClick="ouSuisJe"
            android:id="@+id/ex3_main_btn"
            />
    </LinearLayout>
    string.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <resources>
        <string name="app_name">ED6</string>
        <string name="ousuisje_name">Où suis je ?</string>
    </resources>
    AndroidManifest.xml:
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="fr.ed7"
          android:versionCode="1"
          android:versionName="1.0">
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <application android:label="@string/app_name" >
            <activity android:name="ActiviteOuSuisJe"
                      android:label="@string/ousuisje_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>
    Je vais préciser les lignes qui posent problème dans le code Java dans la méthode ouSuisJe() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    final Location l = this.lm.getLastKnownLocation(
                        LocationManager.PASSIVE_PROVIDER);
    Et:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.lm.requestSingleUpdate(LocationManager.GPS_PROVIDER, ll, null);
    Ces lignes ont le message d'erreur suivant :
    Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`
    This inspection looks at Android API calls that have been annotated with various support annotations (such as RequiresPermission or UiThread) and flags any calls that are not using the API correctly as specified by the annotations.
    Examples of errors flagged by this inspection:
    Passing the wrong type of resource integer (such as R.string) to an API that expects a different type (such as R.dimen).
    Forgetting to invoke the overridden method (via super) in methods that require it
    Calling a method that requires a permission without having declared that permission in the manifest
    Passing a resource color reference to a method which expects an RGB integer value.


    J'ai déjà fait les permissions alors je ne comprends pas bien, j'ai saisie que dans la version 7.0 il faut ajouter quelque chose, mais j'aimerais bien que ça fonctionne et malgré plusieurs recherches sur Internet avec des tutoriels et tout rien ne m'éclaire car ce sont des vieux tutos qui utilisent de vieilles versions, comment faites-vous aujourd'hui?
    Merci à tous pour vos réponses, en vous en remerciant par avance.
    Pikkoro359

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 49
    Par défaut
    Bonjour,

    Pour vérifier des permissions dans mon code java j'utilise çà par exemple : (supprime les erreurs à ta ligne) :

    if(Build.VERSION.SDK_INT >= 23) {
    if (this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
    && this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

    final Location l = this.lm.getLastKnownLocation(
    LocationManager.PASSIVE_PROVIDER);
    }
    }
    Et j'inclus les demandes d'accès (pour la localisation) en mettant des permissions dans le manifest :

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="android.support.multidex.MultiDexApplication"
    package="monPackage">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    Espérant t'avoir aidé,

    Bonne journée,

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 66
    Par défaut
    Salut Regma,

    Merci beaucoup pour ta réponse. Désolé j'ai pas eu le temps de te répondre avant.
    Ta solution ne fait plus d'erreur dans la code Java, puis lorsque je lance l'émulateur l'application se lance correctement mais lorsque je clique sur le bouton là l'application se ferme et à chaque fois ça plante.

    Tu saurais d'où ça peut provenir ?

    J'ai bien mit les 3 permissions dans le manifest comme tu m'as dit aussi.

    Et le code Java j'ai fait comme tu m'as dit, je vais le remettre ici:

    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
    70
    71
    72
    73
    74
    75
    76
     
    import android.Manifest;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.content.pm.ResolveInfo;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    import java.util.List;
     
    public class ActiviteOuSuisJe extends Activity {
        private LocationManager lm;
        private LocationListener ll;
        private Button btn;
     
        @Override
        public void onCreate(final Bundle b) {
            super.onCreate(b);
            this.setContentView(R.layout.ex3_main);
            this.btn = (Button)this.findViewById(R.id.ex3_main_btn);
            this.lm = (LocationManager)this.getSystemService(LOCATION_SERVICE);
            this.ll = new LocationListener() {
                @Override
                public void onLocationChanged(final Location loc) {
                    analyseLocation(loc);
                    btn.setEnabled(true);
                }
                @Override
                public void onStatusChanged(String arg0, int arg1, Bundle arg2){}
                @Override
                public void onProviderEnabled(String arg0){}
                @Override
                public void onProviderDisabled(String arg0){}
            };
        }
        private void analyseLocation(final Location l){
            Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:"
                    +l.getLatitude()+","+l.getLongitude()));
            PackageManager packageManager = getPackageManager();
            List<ResolveInfo> activities = packageManager.queryIntentActivities(i, 0);
            if(activities.size() > 0){
                this.startActivity(i);
            }
        }
        public void ouSuisJe(final View v){
     
            Location l = null;
            if(Build.VERSION.SDK_INT >= 23) {
                if (this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                        && this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
     
                    l = this.lm.getLastKnownLocation(
                            LocationManager.PASSIVE_PROVIDER);
                }
            }
     
            if(null == l || (System.currentTimeMillis()-l.getTime() > 3600e3)){
                Toast.makeText(this, "On demande une nouvelle info ("+l
                        , Toast.LENGTH_LONG).show();
                v.setEnabled(false);
     
                this.lm.requestSingleUpdate(LocationManager.GPS_PROVIDER, ll, null);
            }
            else{
                Toast.makeText(this, "uses last known location", Toast.LENGTH_LONG).show();
                this.analyseLocation(l);
            }
        }
    }

  4. #4
    Membre confirmé Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Par défaut
    Et j'inclus les demandes d'accès (pour la localisation) en mettant des permissions dans le manifest
    Les 2 dernières sont nécessaires mais pas forcément la première si tu utilise LocationManager

    Sinon ton code fonctionne bien, tu as peut être un problème avec le GPS de l’émulateur ... mais donc j'obtiens bien ton toast
    On demande une nouvelle info (null
    et j'obtiens çà :

    Nom : device-2017-03-25-050002.png
Affichages : 3471
Taille : 33,2 Ko

    as tu essayé avec un vrai smartphone en allumant le GPS ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 66
    Par défaut
    Salut Vertebre,

    Merci pour ta réponse, effectivement je n'avais pas essayé avec un vrai téléphone, mon émulateur n'est certainement pas configuré pour cela.
    Sur mon téléphone Samsung ça marche c'est cool haha.

    Par contre saurais tu me dire si en changeant un peu le code et le layout si je peux afficher l'adresse exacte dans un TextView.
    Par exemple je laisse le bouton "Position" qui affiche la carte et le Toast (pas forcément le Toast d'ailleurs), puis un autre bouton qui lui affiche dans un TextView la position non pas sous-forme latitude et longitude mais sous forme adresse postale, genre 15 rue des champs-élysées Paris pour citer un exemple.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 49
    Par défaut
    Pour convertir des coordonnées Latitude, Longitude en adresse du type "12 rue de la rue 11011 ville", j'utilise l'API geocoding de Google map.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    geocoder = new Geocoder(this, Locale.getDefault());
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    List<Address> addresses = geocoder.getFromLocation(Double.parseDouble(et_lat.getText().toString()), Double.parseDouble(et_long.getText().toString()), 1);
                String cliAddr ="";
                if(addresses.size() > 0)
                {
                    for (int i=0;i<addresses.get(0).getMaxAddressLineIndex();i++)
                        cliAddr += addresses.get(0).getAddressLine(i)+"\n";
                }
                Toast.makeText(this, "adresse "+cliAddr, Toast.LENGTH_SHORT).show();
    bonne journée à toi,

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 66
    Par défaut
    Bonjour à tous,

    Cela fait déjà 3 ans que j'ai ouvert ce post et que j'ai résolu mon problème. Si ça peut aider certains d'entre vous, je crois avoir retrouvé l'intégralité de mon code. Par contre je ne l'ai pas retesté avec les dernières mises à jours d'Android Studio et des OS Android donc il est possible que ce code ne fonctionne plus depuis tout ce temps. N'oubliez pas de tester votre code de géolocalisation sur un vrai device (téléphone ou tablette) car l'émulateur n'a pas la fonction de GPS je crois et vérifiez bien sur le téléphone que le GPS est bien activé afin d'être certain que cela fonctionne.

    Code Java : 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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    import android.location.Address;
    import android.location.Geocoder;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
     
     
    public class JouerActivity extends Activity implements View.OnClickListener, LocationListener {
     
      private LocationManager lManager;
      private LocationListener ll;
      private Location location;
      private Button radarButton, positionAdresse, positionCarte;
     
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jouer);
     
        lManager = (LocationManager)getSystemService(JouerActivity.this.LOCATION_SERVICE);
     
        positionAdresse = (Button)findViewById(R.id.positionAdresse);
        positionAdresse.setOnClickListener(this);
        positionCarte = (Button)findViewById(R.id.positionCarte);
        positionCarte.setOnClickListener(this);
      }
     
      public void onClick(View v) {
        switch (v.getId()) {
          case R.id.positionCarte:
            position(v);
            break;
          case R.id.positionAdresse:
            afficherAdresse();
            break;
          default:
            break;
        }
      }
     
      private void afficherAdresse() { // Affiche l'adresse postale dans un TextView
        Geocoder geo = new Geocoder(JouerActivity.this);
     
        location = this.lManager.getLastKnownLocation(
        LocationManager.PASSIVE_PROVIDER);
     
        if (Build.VERSION.SDK_INT >= 23) { // Il faut ajouter ce "if" pour que ça marche sur une version 7.0
          if (this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // Et bien vérifier ces permissions (il faut mettre ces permissions aussi dans ton Manifest.xml)
            location = this.lManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
            lManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 60000, 0, this);
          }
        }
     
        try {
        //Ici on récupère la premiere adresse trouvée gràce à la position que l'on a récupérée
          List<Address> adresses = geo.getFromLocation(location.getLatitude(),
          location.getLongitude(), 1);
     
          if (adresses != null && adresses.size() == 1) {
            Address adresse = adresses.get(0);
            // Si le geocoder a trouvé une adresse, alors on l'affiche
            ((TextView) findViewById(R.id.adresse)).setText(String.format("%s, %s %s",
            adresse.getAddressLine(0),
            adresse.getPostalCode(),
            adresse.getLocality()));
          } else {
            // Sinon on affiche un message d'erreur
            ((TextView) findViewById(R.id.adresse)).setText("L'adresse n'a pu être déterminée");
          }
        } catch (IOException e) {
          e.printStackTrace();
          ((TextView) findViewById(R.id.adresse)).setText("L'adresse n'a pu être déterminée");
        } */
      }
     
      public void position(final View v) { // Cette méthode ouvre Google Map et affiche la position géographique de l'utilisateur sur la carte, un toast te préviens si ça a marché ou pas
        location = this.lManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
        if(Build.VERSION.SDK_INT >= 23) {
          if (this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            location = this.lManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
          }
        }
     
        if(null == location || (System.currentTimeMillis()-location.getTime() > 3600e3)) {
          Toast.makeText(this, "Position inconnue" + location, Toast.LENGTH_LONG).show();
          v.setEnabled(false);
          this.lManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, ll, null);
        } else {
          Toast.makeText(this, "Dernière position connue " + (((TextView)this.findViewById(R.id.adresse))).getText(), Toast.LENGTH_LONG).show();
          this.analyseLocation(location);
        }
      }
     
      private void analyseLocation(final Location l) { // Cette méthode est utilisée dans la méthode précédente, c'est pour pouvoir ouvrir l'application Google Map (donc il y a un Intent)
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:" + l.getLatitude() + "," + l.getLongitude()));
        PackageManager packageManager = getPackageManager();
        List<ResolveInfo> activities = packageManager.queryIntentActivities(i, 0);
        if(activities.size() > 0) {
          this.startActivity(i);
        }
      }
     
      public void onLocationChanged(Location location) { // Les 4 fonctions qui suivent sont obligatoires dans la documentation Android, même si certaines n'ont rien dedans il faut les mettre
        analyseLocation(location);
        //... on sauvegarde la position
        this.location = location;
        //... et on spécifie au service que l'on ne souhaite plus avoir de mise à jour
        lManager.removeUpdates(this);
      }
     
      public void onProviderDisabled(String provider) {
        //... et on spécifie au service que l'on ne souhaite plus avoir de mise à jour
        lManager.removeUpdates(this);
      }
     
      public void onProviderEnabled(String provider) {
      }
     
      public void onStatusChanged(String provider, int status, Bundle extras) {
      }
    }

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

Discussions similaires

  1. Problème de géolocalisation android
    Par android59 dans le forum API standards et tierces
    Réponses: 18
    Dernier message: 14/01/2014, 12h14
  2. géolocalisation d'adresse : erreur d'analyse XML
    Par jerommm dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 02/11/2011, 09h26
  3. Géolocalisation par adresse
    Par ammouna88 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 19/07/2011, 17h59
  4. [Google Maps] Géolocaliser une adresse postale avec l'API V3
    Par LeonCosnyd dans le forum APIs Google
    Réponses: 0
    Dernier message: 21/09/2010, 14h36
  5. Google map géolocalisation auto depuis adresse.
    Par Lexarino dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 17/10/2008, 12h18

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