Wie emuliere ich den GPS-Standort im Android Emulator?

444

Ich möchte Längen- und Breitengrade im Android-Emulator zum Testen erhalten.

Kann mir jemand helfen, wie ich das erreichen kann?

Wie setze ich die Position des Emulators auf eine Testposition?

UMAR
quelle
Wenn Sie Genymotion verwenden: stackoverflow.com/questions/30709329/…
Hachem Benyahia
Sie können eine der vielen Mock-Location-Apps im Play Store installieren.
whoKnows

Antworten:

443

Sie können über Telnet eine Verbindung zum Emulator herstellen. Sie haben dann eine Emulatorkonsole, mit der Sie bestimmte Daten wie Geokorrekturen, Netzwerk usw. eingeben können.

Wie die Konsole verwenden ausführlich erklärt hier . Um eine Verbindung zur Konsole herzustellen, öffnen Sie eine Befehlszeile und geben Sie ein

telnet localhost 5554

Mit dem Befehl geo können Sie dann auf dem Gerät einen Breiten-, Längen- und bei Bedarf Höhe festlegen, der über den GPS-Standortanbieter an alle Programme übergeben wird. Weitere Anweisungen finden Sie unter dem obigen Link.

Der spezifische Befehl, der in der Konsole ausgeführt werden soll, lautet

geo fix <longitude value> <latitude value>

Ich fand diese Seite nützlich, um ein realistisches Lat / Lng zu finden: http://itouchmap.com/latlong.html

Wenn Sie mehr als eine Koordinate benötigen, können Sie auch eine kml-Datei mit einer Route verwenden. Diese wird in diesem Artikel ein wenig beschrieben . Ich kann momentan keine bessere Quelle finden.

Janusz
quelle
13
Mit Geo Fix habe ich auch den falschen Breiten- und Längengrad eingestellt, der immer noch den Null-Standort erhält.
UMAR
2
oder auf einfache Weise schalten Sie GPS im Emulator ein und gehen Sie zur Emulatorsteuerung. Geben Sie Dummy Lat, Long-Werte an und senden Sie diese Werte im Emulator als GPS-Speicherort.
UMAR
35
adb emu geo fix 30.219470 -97.745361
Bryan Rehbein
12
Kümmere dich um die Reihenfolge, lon vor lat!
Christoph
14
Der geo fixBefehl ist nur verfügbar, wenn Sie authzuerst.
Könnte
126

Niemand hier erwähnte die eingebaute Lösung des Emulators selbst, daher möchte ich sie für zukünftige Besucher mit visuellen Elementen teilen.

Führen Sie zuerst Ihren Android-Emulator aus und klicken Sie auf die unten gezeigte Menüschaltfläche (3 Punkte):

Emulator mit Menütaste

Wählen Sie dann im linken Bereich Standort aus und ändern Sie die Koordinaten entsprechend Ihren Anforderungen. Nach dem Klicken auf die Schaltfläche " Senden" werden die Änderungen sofort wirksam (ich empfehle Ihnen, Google Maps zum besseren Verständnis zu öffnen).

Geben Sie hier die Bildbeschreibung ein

Android Studio Version: 2.3.3

Darüber hinaus können Sie die GPX-Datei verwenden, damit Ihre verschiedenen Speicherorte in Echtzeit zu Ihrer Anwendung gelangen. Es ist sehr einfach, diese Datei über den Richtungslink von Google Map zu erstellen:

  1. Gehen Sie zu Google Map, wählen Sie einen Ort aus, drücken Sie "Wegbeschreibung" und geben Sie den zweiten Ort ein.
  2. Kopieren Sie nach dem Erstellen der Route einen Link aus dem Browser
  3. Gehen Sie zu dieser Website: https://mapstogpx.com und fügen Sie den Link zum Feld "Los geht's" ein
  4. Klicken Sie auf die Schaltfläche "Los geht's" und die GPX-Datei wird heruntergeladen

Verwenden Sie die Schaltfläche "GPS / KML laden", um die erstellte Datei in Ihren Emulator zu laden, wählen Sie die Geschwindigkeit und drücken Sie die grüne Wiedergabetaste unten. Die Standorte werden in Echtzeit gesendet (siehe Abbildung unten).

Geben Sie hier die Bildbeschreibung ein

Eden
quelle
Benötigen Sie in dieser Lösung einen Spieldienst im Emulator?
Kevan Aghera
Das glaube ich nicht.
Eden
Wenn ich die App im Emulator öffne, kann der Google API-Client null die Karte nicht in den Emulator laden. und mobiles Gerät gibt es ok für mich.
Kevan Aghera
4
Ich bestätige, dass Sie sich dazu nicht in Ihrem Google-Konto anmelden müssen. Cool!
Xarlymg89
3
Ich musste das emulierte Betriebssystem neu starten, damit es den neuen Speicherort erkennt.
Nate Whittaker
109

Ich suchte nach einer besseren Möglichkeit, die GPS-Koordinaten des Emulators einzustellen, als sie zu verwenden geo fix die spezifischen Längen- und Breitengradkoordinaten zu und manuell zu bestimmen.

Da ich nichts finden konnte, habe ich ein kleines Programm zusammengestellt, das GWT und die Google Maps-API verwendet, um ein browserbasiertes Kartentool zum Festlegen des GPS-Standorts im Emulator zu starten:

Android-GPS-Emulator

Hoffentlich kann es hilfreich sein, anderen zu helfen, die zweifellos auch über diese Schwierigkeit / Frage stolpern.

dpdearing
quelle
wow Danke! Das Setup hat einwandfrei funktioniert, aber ich konnte keine Verbindung zum Emulator herstellen -> Protokolldrucke java.net.ConnectionRefused. dann habe ich telnet localhost 5554 (vom terminal) ausprobiert und es hat funktioniert .. hat noch jemand deinen emulator erfolgreich auf dem mac getestet?
ottel142
1
Ich habe es nicht getestet, aber das sieht so toll aus, dass ich denke, Google sollte der Welt davon erzählen. Einfache Ideen sind immer die besten. Warum hat niemand daran gedacht?
Tiktak
@ ottel142 - Ja, ich laufe tatsächlich ohne dieses Problem auf einem Mac (mit Chrome auf Mavericks). Diese ConnectionRefusedMeldung wird angezeigt , wenn ich den GPS-Emulator vor dem Starten des virtuellen Android-Geräts starte. Oben in meinem Browser steht außerdem "Fehler beim Herstellen der Verbindung an Port 5554 ...". Alles funktioniert
einwandfrei,
Genau das, was ich brauchte.
David
Dies ist ein gutes Programm, aber die Systemlokalität ändert die Funktionsweise von Floats. Auf meinem System muss es wie geo fix 42,42 42,42 42Kommas statt Punkte sein.
Nurettin
81

Wenn Sie verwenden Eclipse, gehen Sie zu Window->Open Perspective->DDMS, geben Sie eins ein Location Controlsund drücken Sie Send.

SteveCav
quelle
8
Dies ist bei weitem die einfachste Methode, die ich je gesehen habe. Stellen Sie sicher, dass Sie Ihre AVD mit GPS-Unterstützung eingerichtet haben. Klicken Sie dann in der DDMS-Perspektive auf den Emulator, der unter Geräte ausgeführt wird, und wählen Sie im mittleren rechten Bereich die Registerkarte Emulatorsteuerung. Unten befindet sich der Abschnitt Standortsteuerungen, den SteveCav erwähnt hat (Verwenden Eclipse Juno 4.2 für Java-Entwickler mit dem neuesten ADT). Das Fenster "Standortsteuerung" war sogar mit Standortdaten vorinstalliert.
Steven Magana-Zook
gute Antwort! funktioniert mit jedem ide, weil ddms Teil des sdk ist (yoursdkfolder / tools /)
Zarokka
1
Dies und die oben genannte Telnet-Lösung haben bei mir funktioniert. Ich versuche, meinen Standort so zu ermitteln, aber er ist immer noch null. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Crowmagnumb
Wenn ich "Location Controls" in DDMS verwende, wird beim Senden der folgende Fehlermeldung angezeigt Unable to send command to the emulator. Irgendeine Idee, warum es nicht funktioniert? Ich verwende die Standard-Nexus 4 AVD
emersonthis
1
Ich kann dies nicht tun, die Standortkontrollen sind ausgegraut
Utsav Gupta
33

Für Android Studio-Benutzer:

Führen Sie den Emulator aus.

Dann geh zu Tools -> Android ->Android device monitor

Öffnen Sie die Emulator ControlRegisterkarte und verwenden Sie die Positionssteuerungsgruppe.

ofer
quelle
In meinem Fall können alle Dateien nicht bearbeitet werden. Haben sie eine Idee ?
Olkunmustafa
4
@MustafaOlkun Es bedeutet wahrscheinlich, dass der Emulator selbst diese Steuerelemente hat. Suchen Sie nach einem "..." neben dem Emulator.
Justin
3
Ich habe das gleiche Problem. Sie können nicht bearbeitet werden. und ja da ist das "...". Wenn ich jedoch etwas dort
ablege und sende
14

Angenommen, Sie haben eine Kartenansicht eingerichtet und ausgeführt:

MapView mapView = (MapView) findViewById(R.id.mapview);
final MyLocationOverlay myLocation = new MyLocationOverlay(this, mapView);

mapView.getOverlays().add(myLocation);
myLocation.enableMyLocation();

myLocation.runOnFirstFix(new Runnable() {
    public void run() {
        GeoPoint pt = myLocation.getMyLocation();
    }
});

Sie benötigen die folgende Berechtigung in Ihrem Manifest:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Um Scheinkoordinaten von Eclipse an den Emulator zu senden, gehen Sie zum Menü "Fenster", wählen Sie "Ansicht anzeigen"> "Andere"> "Emulatorsteuerung" und Sie können Koordinaten über das angezeigte Emulatorsteuerungsfenster senden.

David Hedlund
quelle
3
aber mein Freund, wo sind die Längen- und Breitengrade?
UMAR
1
Ich habe versucht, dies zu verwenden und Scheinwerte an die Emulatorsteuerung zu senden, aber wenn ich die Senden-Taste drücke, macht es nichts. Es wird keine Meldung angezeigt, dass nichts die gesendeten Werte bestätigt oder nicht. seocnd thing GeoPoint g = myLocation.getMyLocation (); gibt den Nullwert zurück.
UMAR
Sind Sie sicher, dass Sie es in verwenden runOnFirstFix? Da dies das Ereignis ist, das ausgelöst wird, wenn das Gerät zum ersten Mal eine GPS-Position empfängt, getMyLocationsollte es auf jeden Fall einen Wert zurückgeben , falls dies jemals ausgelöst wird .
David Hedlund
13

1. Android Studio-Benutzer.

Nach dem Ausführen des Emulators gehen Sie zu Extras-> Android-> Android-Gerätemonitor

Klicken Sie in der Gruppe Standortsteuerelemente auf die Registerkarte Emulatorsteuerung ändern.

2. Eclipse-Benutzer.

Wählen Sie zuerst in Eclipse In Menu "Window", dann "Open Perspective" und dann "DDMS". dh Fenster-> Perspektive öffnen-> DDMS.

Sie sehen auf der linken Seite Gerätebedienfeld und auf der rechten Seite sehen Sie verschiedene Registerkarten. Wählen Sie die Registerkarte "Emulatorsteuerung".

Unten sehen Sie die Standortsteuerung. Wählen Sie die Registerkarte "Manuell".

Geben Sie Längen- und Breitengrad in Textfelder ein und klicken Sie auf die Schaltfläche Senden. Die Position wird an Ihren Emulator und die Anwendung gesendet.

3. Telnet verwenden.

Geben Sie im Befehl run Folgendes ein.

telnet localhost 5554

Wenn Sie kein Windows verwenden, können Sie einen beliebigen Telnet-Client verwenden.

Verwenden Sie nach dem Herstellen einer Verbindung mit Telnet den folgenden Befehl, um Ihre Position an den Emulator zu senden.

geo fix long lat    
geo fix -121.45356 46.51119 4392

4. Verwenden Sie das browserbasierte Google Maps-Tool

Es gibt ein Programm, das GWT und die Google Maps-API verwendet, um ein browserbasiertes Kartentool zum Festlegen des GPS-Standorts im Emulator zu starten:

Android-GPS-Emulator

Muhammad Yousaf Sulahria
quelle
Diese erste Option hat bei mir mit einer kleinen Änderung funktioniert. Ich konnte das DDMS-Fenster von Eclipse aus nicht öffnen. Ich habe nur eine leere graue Seite erhalten. Aber während ich den Emulator laufen ließ, konnte ich, wenn ich DDMS über eine Eingabeaufforderung (C: \ Programme \ Android \ android-sdk \ tools \ ddms) öffnete, das Fenster sehen, das Sie mit Geräte links und "Emulatorsteuerung" beschrieben haben "Registerkarte rechts. Vielen Dank!
Eric Barr
10

Verwenden des Befehls "geo" in der Emulatorkonsole

So senden Sie Scheinstandortdaten über die Befehlszeile:

  1. Starten Sie Ihre Anwendung im Android-Emulator und öffnen Sie ein Terminal / eine Konsole im Verzeichnis / tools Ihres SDK.

  2. Stellen Sie eine Verbindung zur Emulatorkonsole her:

    telnet localhost 5555 (Ersetzen Sie 5555 durch den Port, auf dem Ihr Emulator ausgeführt wird.)

  3. Senden Sie die Standortdaten: * geofix, um einen festen geografischen Standort zu senden.

    Dieser Befehl akzeptiert einen Längen- und Breitengrad in Dezimalgraden und eine optionale Höhe in Metern. Zum Beispiel:

    geo fix -121.45356 46.51119 4392
Dan Zhao
quelle
8

Ich habe ein Python-Skript geschrieben, um GPS-Speicherorte über Telnet an den Emulator zu senden. Es definiert einen Quell- und einen Zielort. Es gibt auch einen Zeitversatz, mit dem Sie steuern können, wie lange Koordinaten auf das Gerät übertragen werden. Ein Ort wird einmal pro Sekunde geschoben.

Im folgenden Beispiel bewegt sich das Skript in 120 Sekunden von Berlin nach Hamburg. Ein Schritt / GPS-Standort pro Sekunde mit zufälligen Abständen.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import telnetlib
from time import sleep
import random

HOST = "127.0.0.1"
PORT = 5554
TIMEOUT = 10
LAT_SRC = 52.5243700
LNG_SRC = 13.4105300
LAT_DST = 53.5753200
LNG_DST = 10.0153400
SECONDS = 120

LAT_MAX_STEP = ((max(LAT_DST, LAT_SRC) - min(LAT_DST, LAT_SRC)) / SECONDS) * 2
LNG_MAX_STEP = ((max(LNG_DST, LNG_SRC) - min(LNG_DST, LNG_SRC)) / SECONDS) * 2

DIRECTION_LAT = 1 if LAT_DST - LAT_SRC > 0 else -1
DIRECTION_LNG = 1 if LNG_DST - LNG_SRC > 0 else -1

lat = LAT_SRC
lng = LNG_SRC

tn = telnetlib.Telnet(HOST, PORT, TIMEOUT)
tn.set_debuglevel(9)
tn.read_until("OK", 5)

tn.write("geo fix {0} {1}\n".format(LNG_SRC, LAT_SRC))
#tn.write("exit\n")

for i in range(SECONDS):
    lat += round(random.uniform(0, LAT_MAX_STEP), 7) * DIRECTION_LAT
    lng += round(random.uniform(0, LNG_MAX_STEP), 7) * DIRECTION_LNG

    #tn.read_until("OK", 5)
    tn.write("geo fix {0} {1}\n".format(lng, lat))
    #tn.write("exit\n")
    sleep(1)

tn.write("geo fix {0} {1}\n".format(LNG_DST, LAT_DST))
tn.write("exit\n")

print tn.read_all()
user937284
quelle
Klappt wunderbar! Danke für das Teilen.
Alberto Gaona
Mmmmm. Ich denke, es gibt einen kleinen Fehler: Soweit ich weiß, erhält die Geo-Fix-Nachricht Längen- und Breitengrad in der folgenden Reihenfolge: Sie senden sie umgekehrt. Siehe Antworten oben.
Alberto Gaona
Funktioniert nicht. Der Emulator überwacht den Port, empfängt jedoch nichts.
Durga Swaroop
5

Ich benutze die Eclipse Plug DDMS-Funktion, um GPS zu senden. Geben Sie hier die Bildbeschreibung ein

Gekochtes Wasser
quelle
5

Unter Linux, wo Kommunikationsports blockiert sind. Navigieren Sie im Terminal zum Ordner "platform-tools" android sdkund lösen Sie den folgenden Befehl aus:

./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
abhishek singh
quelle
5

In Mac, Linux oder Cygwin:

echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554

Das bringt Sie nach Mexiko-Stadt. Ändern Sie Ihren Längen- / Breitengrad / Ihre Höhe entsprechend. Das sollte reichen, wenn Sie nicht an nmea interessiert sind.

Alberto Gaona
quelle
Möglicherweise müssen Sie den 5554 an Ihren aktuellen Emulator-Abhörport anpassen.
Alberto Gaona
5

Die folgende Lösung hat bei mir funktioniert - Befehlszeile öffnen und schreiben:

adb emu geo fix [longtitude] [latitude]
Asaf Pinhassi
quelle
5

Mit der neuesten Version von Android Studio 4 und seinem neuen Emulator-Update vom 23.10.2019 wird es endlich einfacher. Starten Sie Ihren Emulator und gehen Sie zu den Emulatorparametern ...> Auf der Registerkarte "Routen" können Sie zwei Punkte auf der Karte von / bis auswählen und eine neue Route mit einer einstellbaren Wiedergabegeschwindigkeit von mehr als 1000 km / h starten!

Geben Sie hier die Bildbeschreibung ein

Smile2Life
quelle
4

Gehen Sie zuerst in den DDMS-Bereich Ihrer Eclipse, als die Emulatorsteuerung zu öffnen. Gehen Sie zum manuellen Abschnitt, stellen Sie lat und long ein und drücken Sie dann die Senden-Taste

Sachin Pareek
quelle
3

Ich habe versucht, den Geo-Fix für viele Punkte über adb einzustellen, und konnte meine App nicht dazu bringen, GPS-Daten zu sehen. Als ich jedoch versuchte, DDMS zu öffnen, den Prozess meiner App auszuwählen und Koordinaten über die Registerkarte "Emulatorsteuerung" zu senden, funktionierte dies sofort.

James
quelle
Sie müssen keinen Prozess angeben ... Oder DDMS in 2010 erfordert dies.
3

Dalvik Debug Monitor> Wählen Sie Emulator> Registerkarte Emulatorsteuerung> Standortsteuerung.

DDMS - android_sdk / tools / ddms ODER android_sdk / tools / monitor

Dan
quelle
2

Wenn Sie Eclipse verwenden, können Sie mit dem Emulator-Controller Breiten- und Längengrade manuell einstellen und Ihre kartenbasierte App im Emulator ausführen

Swapnil
quelle
2

Wenn Sie Android Studio (1.3) verwenden:

  • Klicken Sie auf Menü "Extras"
  • "Android"
  • "Android-Gerätemonitor"
  • Klicken Sie auf Ihren aktuellen Emulator
  • Registerkarte "Emulatorsteuerung"
  • Gehen Sie zu "Location Controls" und geben Sie Lat und Lon ein
Elektrobabe
quelle
2

Machen Sie einfach Alberto Gaonas Antwort in einer Zeile

token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n  geo fix 96.0290791 16.9041016  \n exit") - | nc localhost 5554

5554 ist die in gezeigte Emulator-Portnummer adb devices .

Es wäre besser gewesen, wenn adb emugearbeitet hätte.

Kyaw Tun
quelle
sehr nützlicher Einzeiler! in meinem Fall musste ich die Leerzeichen zwischen \ n entfernen: token = $ (cat ~ / .emulator_console_auth_token); cat <(echo -e "auth $ token \ ngeo fix 96.0290791 19.9041016 \ nexit") - | nc localhost 5554
Jeremie
1

Wenn die oben genannten Lösungen nicht funktionieren. Versuche dies:

Fügen Sie in Ihrer android Manifest.xml die folgenden zwei Links AUSSERHALB des Anwendungs-Tags hinzu, aber natürlich innerhalb Ihres Manifest-Tags

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
ssgao
quelle
1

Ich konnte keinen GPS-Fix für den Emulator erhalten, als der Emulator ein Android-Bild ohne Google-APIs ausführte. Sobald ich das Bild so geändert habe, dass es Google APIs enthält, funktionieren alle hier genannten Möglichkeiten, um ein GPS-Update zu erhalten.

Stellen Sie sicher, dass Sie beim Erstellen von AVD ein Bild mit Google APIs auswählen.

dvim
quelle
Was meinst du mit Bild und wie würde ich beim Erstellen von AVD ein Bild mit Google APIs auswählen? Beim Erstellen von AVD in Eclipse gibt es keine solchen Optionen.
user1911703
Stellen Sie sicher, dass Sie Bilder mit Google APIs über den Android SDK-Manager heruntergeladen haben.
dvim
1

Die bereits mehrfach erwähnte Antwort zur Verwendung des Shell-Befehls " geo fix ... " ist die richtige Antwort. Wenn Sie jedoch LocationClient.getLastLocation () zum Abrufen Ihrer Daten verwenden, sollten Sie erwähnen, dass dies zunächst nicht funktioniert. Die LocationClient-Klasse verwendet den Google Play Service, um die Koordinaten abzurufen. Für mich begann dies zu funktionieren, nachdem ich die Emulators Maps App einmal ausgeführt hatte. Beim ersten Start werden Sie aufgefordert, Google Apps Zugriff auf Ihren Standort zu gewähren, was meiner Meinung nach den Trick macht.

Maik
quelle
1

Für ein eigenes Projekt habe ich einen Onlinedienst entwickelt, der dem Android-Emulator einen simulierten Standort bereitstellen kann.

Es verwendet Geo-nmea anstelle von Geo-Fix, wodurch Geschwindigkeit, Kurs, genaue Zeit usw. zusätzlich zu nur Lat / Lon eingestellt werden können.

Der Dienst erfordert das Befehlszeilenprogramm nc (netcat) und sonst nichts.

http://www.kisstech.ch/nmea/

Gerhard Wesp
quelle
1

Öffnen Sie Android Studio-> Menü Extras-> Android-> Android-Gerätemonitor-> Registerkarte Emulator-> Standortsteuerung-> Stellen Sie den gewünschten Breiten- und Längengrad ein und überprüfen Sie Ihr Projekt nach Bedarf

Premkumar Manipillai
quelle
Sie können den statischen Positionswert (Breite und Länge) festlegen. Welche Position müssen Sie direkt im Codierungsteil überprüfen?
Premkumar Manipillai
0

In der Sonnenfinsternis:

Möglicherweise müssen Sie das DDMS-Fenster nach unten ziehen. 'Standortsteuerung' befindet sich unter 'Telefonieaktionen' und kann durch eine normal große Konsolenansicht ausgeblendet werden (die Leiste mit Konsole, LogCat usw. deckt sie möglicherweise ab!).

~

Droiden-Teehaus
quelle
In DDMS habe ich unter Emulator Control gefunden. Registerkarte unter Standortsteuerung.
user914425