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?
Réponses
Trop de publicités?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é.
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;
}