91 votes

Android: obtenir la position actuelle de l'utilisateur sans utiliser le GPS ni Internet

Est-il possible d'obtenir l'emplacement actuel de l'utilisateur sans utiliser gps ou internet ? Je veux dire avec l'aide du fournisseur de réseau mobile. Quelqu'un peut-il m'aider?

87voto

Ian Points 2012

Ce que vous cherchez à faire est d'obtenir la position à l'aide de l' LocationManager.NETWORK_PROVIDER au lieu de LocationManager.GPS_PROVIDER. L' NETWORK_PROVIDER se résoudra sur le GSM ou wifi, qui jamais disponible. Évidemment, avec le wifi désactivé, GSM sera utilisé. Gardez à l'esprit que l'utilisation du réseau de cellules est exact pour l'essentiel à 500m.

http://developer.android.com/guide/topics/location/obtaining-user-location.html a quelques vraiment grands de l'information et des exemples de code.

Après vous en aurez terminé avec la plupart des codes en OnCreate(), ajoutez ceci:

// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
      makeUseOfNewLocation(location);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

Vous pourriez aussi demander à votre activité, mettre en œuvre l' LocationListener de la classe et ainsi de mettre en œuvre onLocationChanged() dans votre activité.

18voto

hwrdprkns Points 4221

Par l'obtention de l' getLastKnownLocation vous n'avez pas réellement lancer un correctif vous-même.

Être conscient que cela pourrait démarrer le fournisseur, mais si l'utilisateur a déjà reçu un emplacement avant, je ne pense pas que ça. Les docs ne sont pas vraiment trop clair sur ce point.

Selon les docs getLastKnownLocation:

Returns a Location indicating the data from the last known location fix obtained from the given provider. This can be done without starting the provider.

Voici un bref extrait:

private Location getLastKnownLoaction(boolean enabledProvidersOnly){

LocationManager manager = mActivityContext.getSystemService(Context.LOCATION_SERVICE);

Location location = null;

List<String> providers = manager.getProviders(enabledProvidersOnly)

for(String provider : providers){

location = manager.getLastKnownLocation(provider);
//maybe try adding some Criteria here

if(location != null) return location;
}

//at this point we've done all we can and no location is returned
return null;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X