web-dev-qa-db-fra.com

Comment obtenir Android localisation GPS

Salut, j'essaie d'obtenir le GPS-Location actuel via Android. J'ai suivi ce tutoriel et article de Vogellas aswell. Bien que cela ne fonctionne pas. Lorsque j'utilise LocationManager.NETWORK_PROVIDER, je reçois toujours une latitude de 51 et une longitude de 9 - peu importe ma position. Lorsque j'utilise LocationManager.GPS_PROVIDER, je ne reçois rien du tout.

Bien que tout fonctionne avec GMaps: S Je ne sais pas pourquoi. Comment puis-je obtenir la position GPS actuelle comme le fait GMaps?

Voici mon code:

package com.example.gpslocation;

import Android.location.Location;
import Android.location.LocationListener;
import Android.location.LocationManager;
import Android.os.Bundle;
import Android.app.Activity;
import Android.content.Context;
import Android.util.Log;
import Android.view.Menu;

public class GPS_Location extends Activity implements LocationListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gps__location);

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.gps__location, menu);
    return true;
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub

    int latitude = (int) (location.getLatitude());
    int longitude = (int) (location.getLongitude());

    Log.i("Geo_Location", "Latitude: " + latitude + ", Longitude: " + longitude);
}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

}
30
JustBasti

Voici votre problème:

int latitude = (int) (location.getLatitude());
int longitude = (int) (location.getLongitude());

La latitude et la longitude sont des valeurs double-, car elles représentent l'emplacement en degrés.

En les lançant dans int, vous supprimez tout ce qui se trouve derrière la virgule, ce qui fait toute la différence. Voir "Degrés décimaux - Wiki"

26
Lukas Knuth

Essaie :

public LatLng getLocation()
    {
     // Get the location manager
     LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
     Criteria criteria = new Criteria();
     String bestProvider = locationManager.getBestProvider(criteria, false);
     Location location = locationManager.getLastKnownLocation(bestProvider);
     Double lat,lon;
     try {
       lat = location.getLatitude ();
       lon = location.getLongitude ();
       return new LatLng(lat, lon);
     }
     catch (NullPointerException e){
         e.printStackTrace();
       return null;
     }
    }
21
Sercan Ozdemir

Ce code a un problème:

int latitude = (int) (location.getLatitude());
int longitude = (int) (location.getLongitude());

Vous pouvez changer int en double

double latitude = location.getLatitude();
double longitude = location.getLongitude();
12
azatserzhan

Le problème initial est résolu en remplaçant lat et lon par doubler.

Je veux ajouter un commentaire à la solution avec Location location = locationManager.getLastKnownLocation(bestProvider); Cela fonctionne pour trouver le dernier emplacement connu quand une autre application était à l'écoute pour cela. Si, par exemple, aucune application ne l'a fait depuis le démarrage de l'appareil, le code retourne des zéros (j'ai récemment passé un peu de temps à résoudre ce problème).

De plus, c’est une bonne pratique d’arrêter d’écouter lorsque locationManager.removeUpdates(this); ne le fait pas.

De plus, même avec des autorisations dans manifest, le code fonctionne lorsque le service de localisation est activé dans les paramètres Android sur un périphérique.

8
Alexei Martianov

Extrait:-

try 
        {
          cnt++;scnt++;now=System.currentTimeMillis();r=Rand.nextInt(6);r++;
            loc=lm.getLastKnownLocation(best);
            if(loc!=null){lat=loc.getLatitude();lng=loc.getLongitude();}

            Thread.sleep(100);
            handler.sendMessage(handler.obtainMessage());
         } 
        catch (InterruptedException e) 
        {
            Toast.makeText(this, "Error="+e.toString(), Toast.LENGTH_LONG).show();
        }

Comme vous pouvez le voir ci-dessus, un fil de discussion est exécuté parallèlement au fil principal d'activité de l'interface utilisateur, qui affiche en permanence le lat GPS, le long de l'heure actuelle et un lancer de dés aléatoire.

SI vous êtes curieux, vérifiez simplement le code complet: position GPS avec un lancer de dés aléatoire et l'heure actuelle dans un fil séparé

0
Animesh Shrivastav