it-swarm.com.de

Holen Sie sich den aktuellen Standort des Nutzers in Android, ohne GPS oder Internet zu verwenden

Ist es möglich, den aktuellen Standort des Benutzers ohne GPS oder Internet zu ermitteln? Ich meine mit Hilfe des Mobilfunkanbieters.

86
Prabhu M

Sie möchten die Position mit LocationManager.NETWORK_PROVIDER anstelle von LocationManager.GPS_PROVIDER abrufen. Der NETWORK_PROVIDER wird auf dem GSM oder WLAN aufgelöst, was immer verfügbar ist. Natürlich wird bei ausgeschaltetem WLAN GSM verwendet. Beachten Sie, dass die Verwendung des Zellennetzwerks im Wesentlichen 500 m beträgt. 

http://developer.Android.com/guide/topics/location/obtaining-user-location.html enthält einige wirklich großartige Informationen und Beispielcode.

Nachdem Sie den größten Teil des Codes in OnCreate() erledigt haben, fügen Sie Folgendes hinzu:

// 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 Ihre Aktivität auch die LocationListener-Klasse implementieren lassen und somit onLocationChanged() in Ihre Aktivität implementieren.

80
Ian

Durch das Abrufen der getLastKnownLocation initiieren Sie selbst keine Korrektur.

Beachten Sie, dass könnte den Provider starten, aber wenn der Benutzer zuvor einen Standort erhalten hat, glaube ich nicht, dass dies der Fall ist. Die Dokumente sind nicht wirklich klar.

Laut den Dokumenten getLastKnownLocation:

Gibt einen Ort zurück, der die Daten vom letzten bekannten Ort angibt Fix vom angegebenen Anbieter erhalten. Dies kann ohne .__ erfolgen. Starten des Providers.

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 für AndroidManifest.xml hinzufügen.

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
14
hwrdprkns

Hier ist es möglich, den aktuellen Standort des Benutzers ohne die Verwendung von GPS und Netzwerkprovider abzurufen.

1. Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"

2 . Klicken Sie hier für Ihre Referenz

3
Mahendran Candy
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;
    }
}
3
Makvin

Nein, Sie können derzeit keinen Standort ohne GPS oder Internet erhalten. 

Lokalisierungstechniken, die auf WiFi, Cellular oder Bluetooth basieren, arbeiten mit Hilfe 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 WLAN-Umfragen von bekannten Standorten basiert. Ohne Internetzugang müssen Sie über eine lokale Kopie einer solchen Datenbank verfügen und diese auf dem neuesten Stand halten. Für den weltweiten Gebrauch ist dies sehr unpraktisch. 

Theoretisch könnte ein Mobilfunkanbieter nur einen lokalen Datendienst bereitstellen, jedoch keinen Zugang zum Internet haben, und anschließend Standortanfragen von mobilen Geräten beantworten. Mobilfunkanbieter tun dies nicht; Niemand möchte für diese Art des eingeschränkten Datenzugriffs bezahlen. Wenn Sie über Ihren Mobilfunkanbieter einen Datendienst haben, haben Sie Internetzugang. 

Kurz gesagt, die Verwendung von LocationManager.NETWORK_PROVIDER oder Android.hardware.location.network zum Abrufen des Standorts erfordert die Verwendung des Internets.  

Die Verwendung der letzten bekannten Position setzt voraus, dass Sie kürzlich über GPS- oder Internetzugang verfügen. Wenn Sie gerade Internet hatten, können Sie vermutlich Ihre Position oder Einstellungen anpassen, um wieder Internet zu erhalten. Wenn Ihr Gerät über keinen GPS- oder Internetzugang verfügt, hilft Ihnen die letzte bekannte Positionsfunktion nicht. 

Ohne GPS oder Internet könnten Sie: 

  1. Machen Sie Fotos vom Nachthimmel und schätzen Sie anhand der Sternzeit Ihren Standort anhand der Sternzeit. Dies würde wahrscheinlich zusätzliche Geräte erfordern, um sicherzustellen, dass die Winkel für Ihre Bilder korrekt gemessen werden. 
  2. Verwenden Sie einen Beschleunigungssensor, um den Standort von einer bekannten Position aus zu verfolgen. Die Anhäufung von Fehlern bei dieser Art von Ansatz macht es für die meisten Situationen unpraktisch. 
2
mattm

Sie können dazu TelephonyManager verwenden.

0

Haben Sie sich Google Maps Geolocation Api angeschaut? Google Map Geolocation

Dies ist ein einfaches RestApi, Sie brauchen nur POST eine Anforderung, der Dienst gibt einen Ort mit einer Genauigkeit in Metern zurück.

0
raditya gumay