Erhalten Sie den aktuellen Standort des Benutzers in Android, ohne GPS oder Internet zu verwenden

91

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

Prabhu M.
quelle
1
Funktioniert die akzeptierte Antwort perfekt? Bei mir funktioniert es nicht ... !!!
Samitha Chathuranga
3
Leider ist die akzeptierte Antwort falsch :-( Erstaunlich, dass es 28 positive Stimmen bekommen hat, obwohl es die Frage nicht richtig beantwortet!
David Wasser
@ DavidWasser Schätzen Sie Ihre wertvollen Kommentare. Und glauben Sie, dass es tatsächlich keine Methode gibt, um die Standortdetails ohne Internet oder GPS abzurufen? (außer durch die Verwendung dieser Zelle Broadcast-Nachrichten)
Samitha Chathuranga
2
@SamithaChathuranga Denken Sie darüber nach: Wenn Sie kein GPS und kein Internet haben, wo erhalten Sie diese Informationen? Sie können die Zellen-ID-Informationen aus dem Netzwerk abrufen. Dies gibt Ihnen nur die ID. Sie benötigen dann eine Möglichkeit, die ID einer tatsächlichen Koordinate oder einem tatsächlichen Namen zuzuordnen. Sie können jederzeit eine eigene Zellen-ID-Datenbank erstellen und in Ihre Anwendung aufnehmen. Die Erfassung all dieser Daten erfordert jedoch sehr viel Arbeit, und die Zuordnung ist nicht statisch: Sie ändert sich, wenn Mobilfunkbetreiber neue Mobilfunkmasten installieren und neu nummerieren ihre Netzwerke. Grundsätzlich lautet die praktische Antwort "Nein".
David Wasser
@ DavidWasser Danke für die Antwort. Ich hatte auch eine große Überraschung, wie man den Ort ohne Internet oder GPS bekommt. Aber das Einbeziehen von Stackoverflow in viele Foren soll möglich sein. Deshalb dachte ich, dass es möglich sein wird. Es scheint, dass viele Leute auch irregeführt sind.
Samitha Chathuranga

Antworten:

87

Was Sie tun möchten, ist die Position mit dem LocationManager.NETWORK_PROVIDERanstelle von zu erhalten LocationManager.GPS_PROVIDER. Das NETWORK_PROVIDERwird 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 LocationListenerKlasse auch von Ihrer Aktivität implementieren lassen und somit onLocationChanged()in Ihrer Aktivität implementieren .

Ian
quelle
1
Bitte denken Sie daran, Strategien zur Batteriesparung zu prüfen. Abhängig von Ihrer Anwendung können Sie mit PASSIVE_PROVIDER und der Verwendung von getLastKnownLocation viel Arbeit und Batterie sparen, wenn andere Anwendungen die Antennen verwenden.
Ian
2
Hey @Ian, ich habe den gleichen Code verwendet. In meinem Fall wurde die Listener-Methode onLocationChanged () nie aufgerufen. Ich habe requestLocationUpdates für die onResume () -Methode verwendet. immer noch hat es nie angerufen .. Also, was war dort Problem gewesen?
MS.
2
Hey @lan oder eine andere Person, die mir helfen kann Ich habe den obigen Code implementiert, aber die onLocationChanged Methode neved wird aufgerufen. Was wäre das Problem
? Kann
1
Ist es möglich, die Koordinaten ohne Internet zu erhalten? In einigen Geräten scheint es nicht zu funktionieren.
Iammilind
20
Diese Antwort ist falsch :-( OP hat gefragt, wie der Standort ohne Internetverbindung ermittelt werden soll. LOCATION_PROVIDER muss über das Internet auf Server zugreifen, um eine Sammlung von Zellen-ID- und WIFI-MAC-Adressen in eine Geokoordinate aufzulösen. Wenn Sie kein Internet haben Verbindung Sie können keine Koordinate erhalten. Wenn Sie mir mitteilen, dass dies für Sie funktioniert, bedeutet dies, dass Sie entweder eine Internetverbindung haben oder eine Internetverbindung hatten (die Standort-API lädt einige Informationen über die Umgebung herunter und speichert sie zwischen). , oder die Standortinformationen sind alt (und daher ungenau).
David Wasser
16

Indem getLastKnownLocationSie 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" />
hwrdprkns
quelle
Was ich denke ist, ist es möglich, den aktuellen Standort über ein Mobilfunknetz zu ermitteln
Prabhu M
Sie müssen die Dokumente lesen. Lernen Sie die Unterschiede zwischen PASSIVE_PROVIDER, NETWORK_PROVIDERund GPS_PROVIDER.
hwrdprkns
1
Obwohl dies ideal ist, würde ich die Zeit des letzten Speicherorts mit getTime () überprüfen. Dann müssen Sie nur noch entscheiden, wie alt Sie dies zulassen. Wenn es zu alt ist, dann bekomme eine neue Position mit meinem Beitrag.
Ian
1
@ Ian Wie bekomme ich den neuen oder frischen Standort?
Archie.bpgc
5
Können wir Lage , wenn GPS ausgeschaltet ist
Prasad
4
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;
    }
}
Makvin
quelle
4

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:

  1. Machen Sie Fotos vom Nachthimmel und schätzen Sie anhand der aktuellen Zeit Ihren Standort anhand einer Sternenkarte. Dies würde wahrscheinlich zusätzliche Ausrüstung erfordern, um sicherzustellen, dass die Winkel für Ihre Bilder korrekt gemessen werden.
  2. Verwenden Sie einen Beschleunigungsmesser, 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.
mattm
quelle
3

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"

2. Klicken Sie hier als Referenz

Mahendran Candy
quelle
2

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.

Raditya Gumay
quelle
-2

Sie können dazu TelephonyManager verwenden.

Shubham Kumar Gupta Ggps
quelle
Wie können Sie es verwenden?
CoolMind