Ist es möglich, den aktuellen Standort des Benutzers ohne GPS oder Internet abzurufen? Ich meine mit Hilfe des Mobilfunkanbieters.
Ist es möglich, den aktuellen Standort des Benutzers ohne GPS oder Internet abzurufen? Ich meine mit Hilfe des Mobilfunkanbieters.
Antworten:
Was Sie tun möchten, ist die Position mit dem LocationManager.NETWORK_PROVIDER
anstelle von zu erhalten LocationManager.GPS_PROVIDER
. Das NETWORK_PROVIDER
wird auf dem GSM oder WLAN gelöst, je nachdem, was jemals verfügbar ist. Bei ausgeschaltetem WLAN wird natürlich GSM verwendet. Beachten Sie, dass die Nutzung des Mobilfunknetzes im Grunde genommen auf 500 m genau ist.
http://developer.android.com/guide/topics/location/obtaining-user-location.html enthält einige wirklich gute Informationen und Beispielcode.
Fügen Sie Folgendes hinzu, nachdem Sie mit dem größten Teil des Codes fertig sind OnCreate()
:
// 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);
Sie können die LocationListener
Klasse auch von Ihrer Aktivität implementieren lassen und somit onLocationChanged()
in Ihrer Aktivität implementieren .
Indem getLastKnownLocation
Sie das erhalten, initiieren Sie selbst keine Korrektur.
Beachten Sie, dass dies den Anbieter starten könnte , aber wenn der Benutzer jemals zuvor einen Standort erhalten hat, denke ich nicht, dass dies der Fall sein wird. Die Dokumente sind dazu nicht wirklich klar.
Laut den Dokumenten getLastKnownLocation:
Gibt einen Standort zurück, der die Daten des letzten bekannten Standortfixes angibt, der vom angegebenen Anbieter erhalten wurde. Dies kann ohne Starten des Anbieters erfolgen.
Hier ist ein kurzer Ausschnitt:
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;
}
}
Sie müssen auch eine neue Berechtigung hinzufügen AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
PASSIVE_PROVIDER
, NETWORK_PROVIDER
und 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;
}
}
Nein, Sie können derzeit keinen Standort ermitteln, ohne GPS oder Internet zu verwenden.
Auf WiFi, Mobilfunk oder Bluetooth basierende Ortungstechniken funktionieren mithilfe einer großen Datenbank, die ständig aktualisiert wird. Ein Gerät sucht nach Sender-IDs und sendet diese dann in einer Abfrage über das Internet an einen Dienst wie Google, Apple oder Skyhook. Dieser Dienst antwortet mit einem Standort, der auf früheren drahtlosen Umfragen von bekannten Standorten basiert. Ohne Internetzugang müssen Sie eine lokale Kopie einer solchen Datenbank haben und diese auf dem neuesten Stand halten. Für den globalen Gebrauch ist dies sehr unpraktisch.
Theoretisch könnte ein Mobilfunkanbieter nur einen lokalen Datendienst, jedoch keinen Zugang zum Internet bereitstellen und dann Standortanfragen von Mobilgeräten beantworten. Mobilfunkanbieter tun dies nicht. Niemand möchte für diese Art von eingeschränktem Datenzugriff bezahlen. Wenn Sie einen Datendienst über Ihren Mobilfunkanbieter haben, haben Sie Internetzugang.
Kurz gesagt, für die Verwendung von LocationManager.NETWORK_PROVIDER oder android.hardware.location.network zum Abrufen des Standorts muss das Internet verwendet werden.
Wenn Sie die letzte bekannte Position verwenden möchten, müssen Sie vor kurzem über GPS- oder Internetzugang verfügen. Wenn Sie gerade Internet hatten, können Sie vermutlich Ihre Position oder Einstellungen anpassen, um wieder Internet zu bekommen. Wenn Ihr Gerät keinen GPS- oder Internetzugang hat, hilft Ihnen die letzte bekannte Positionsfunktion nicht weiter.
Ohne GPS oder Internet könnten Sie:
Hier ist es möglich, den aktuellen Standort des Benutzers ohne Verwendung von GPS und Netzwerkanbieter abzurufen.
1. Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
Haben Sie einen Blick auf Google Maps Geolocation Api geworfen? Google Map Geolocation
Dies ist einfach RestApi, Sie benötigen nur POST eine Anfrage, der Service wird einen Ort mit Genauigkeit in Metern zurückgeben.
Es scheint möglich zu sein, ein Smartphone ohne GPS zu verfolgen.
Quellen:
Primär: "PinMe: Verfolgung eines Smartphone-Benutzers auf der ganzen Welt"
Sekundär: "So verfolgen Sie ein Mobiltelefon ohne GPS - oder ohne Zustimmung"
Ich habe noch keinen Link zum endgültigen Code des Teams gefunden. Wenn ich das tue, werde ich posten, wenn ein anderer dies nicht getan hat.