Est-il possible d'obtenir la position actuelle de l'utilisateur sans utiliser le GPS ou Internet? Je veux dire avec l'aide d'un fournisseur de réseau mobile.
Est-il possible d'obtenir la position actuelle de l'utilisateur sans utiliser le GPS ou Internet? Je veux dire avec l'aide d'un fournisseur de réseau mobile.
Réponses:
Ce que vous cherchez à faire est d’obtenir la position en utilisant au LocationManager.NETWORK_PROVIDER
lieu de LocationManager.GPS_PROVIDER
. Le NETWORK_PROVIDER
sera résolu sur le GSM ou le wifi, qui est toujours disponible. Évidemment, avec le wifi désactivé, le GSM sera utilisé. Gardez à l'esprit que l'utilisation du réseau cellulaire est précise à environ 500 m.
http://developer.android.com/guide/topics/location/obtaining-user-location.html contient de très bonnes informations et des exemples de code.
Une fois que vous avez terminé avec la plupart du code 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 pouvez également demander à votre activité de mettre en œuvre la LocationListener
classe et donc de la mettre onLocationChanged()
en œuvre dans votre activité.
En obtenant le, getLastKnownLocation
vous n'initiez pas vous-même une solution.
Sachez que cela pourrait démarrer le fournisseur, mais si l'utilisateur a déjà obtenu un emplacement auparavant, je ne pense pas qu'il le fera. Les documents ne sont pas vraiment trop clairs à ce sujet.
Selon la documentation getLastKnownLocation:
Renvoie un emplacement indiquant les données du dernier correctif d'emplacement connu obtenu du fournisseur donné. Cela peut être fait sans démarrer le fournisseur.
Voici un petit extrait:
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import java.util.List;
public class UtilLocation {
public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location utilLocation = null;
List<String> providers = manager.getProviders(enabledProvidersOnly);
for(String provider : providers){
utilLocation = manager.getLastKnownLocation(provider);
if(utilLocation != null) return utilLocation;
}
return null;
}
}
Vous devez également ajouter une nouvelle autorisation à AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
PASSIVE_PROVIDER
, NETWORK_PROVIDER
et GPS_PROVIDER
.
boolean gps_enabled = false;
boolean network_enabled = false;
LocationManager lm = (LocationManager) mCtx
.getSystemService(Context.LOCATION_SERVICE);
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Location net_loc = null, gps_loc = null, finalLoc = null;
if (gps_enabled)
gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (gps_loc != null && net_loc != null) {
//smaller the number more accurate result will
if (gps_loc.getAccuracy() > net_loc.getAccuracy())
finalLoc = net_loc;
else
finalLoc = gps_loc;
// I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)
} else {
if (gps_loc != null) {
finalLoc = gps_loc;
} else if (net_loc != null) {
finalLoc = net_loc;
}
}
Non, vous ne pouvez actuellement pas obtenir de position sans utiliser le GPS ou Internet.
Les techniques de localisation basées sur WiFi, Cellulaire ou Bluetooth fonctionnent à l'aide d'une grande base de données constamment mise à jour. Un appareil recherche les identifiants des émetteurs, puis les envoie dans une requête via Internet à un service tel que Google, Apple ou Skyhook. Ce service répond avec un emplacement basé sur des enquêtes sans fil précédentes à partir d'emplacements connus. Sans accès Internet, vous devez disposer d'une copie locale d'une telle base de données et la maintenir à jour. Pour une utilisation globale, cela est très peu pratique.
Théoriquement, un fournisseur de téléphonie mobile pourrait fournir uniquement un service de données local, mais pas d'accès à Internet, puis répondre aux requêtes de localisation à partir d'appareils mobiles. Les fournisseurs de téléphonie mobile ne font pas cela; personne ne veut payer pour ce type d'accès restreint aux données. Si vous disposez d'un service de données via votre fournisseur de téléphonie mobile, vous avez accès à Internet.
En bref, l'utilisation de LocationManager.NETWORK_PROVIDER ou android.hardware.location.network pour obtenir l'emplacement nécessite l'utilisation d'Internet.
Pour utiliser la dernière position connue, vous devez avoir un accès GPS ou Internet très récemment. Si vous venez d'avoir Internet, vous pouvez probablement ajuster votre position ou vos paramètres pour accéder à nouveau à Internet. Si votre appareil n'a pas accès au GPS ou à Internet, la dernière fonction de position connue ne vous aidera pas.
Sans GPS ni Internet, vous pourriez:
Ici possible pour obtenir l'emplacement actuel de l'utilisateur sans l'utilisation du GPS et du fournisseur de réseau.
1 . Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
Avez-vous jeté un œil à l'API de géolocalisation Google Maps? Géolocalisation Google Map
C'est simple RestApi, il vous suffit de POSTER une demande, le service retournera un emplacement avec une précision en mètres.
Il semble qu'il soit possible de suivre un téléphone intelligent sans utiliser le GPS.
Sources:
Principal: "PinMe: suivi d'un utilisateur de smartphone dans le monde"
Secondaire: «Comment suivre un téléphone portable sans GPS ou sans consentement»
Je n'ai pas encore trouvé de lien vers le code final de l'équipe. Quand je le ferai, je posterai, si un autre ne l'a pas fait.