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?
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?
Antworten:
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.
geo fix
Befehl ist nur verfügbar, wenn Sie auth
zuerst.
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):
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).
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:
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).
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:
Hoffentlich kann es hilfreich sein, anderen zu helfen, die zweifellos auch über diese Schwierigkeit / Frage stolpern.
ConnectionRefused
Meldung 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
geo fix 42,42 42,42 42
Kommas statt Punkte sein.
Wenn Sie verwenden Eclipse
, gehen Sie zu Window->Open Perspective->DDMS
, geben Sie eins ein Location Controls
und drücken Sie Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
. Irgendeine Idee, warum es nicht funktioniert? Ich verwende die Standard-Nexus 4 AVD
Für Android Studio-Benutzer:
Führen Sie den Emulator aus.
Dann geh zu Tools -> Android ->Android device monitor
Öffnen Sie die Emulator Control
Registerkarte und verwenden Sie die Positionssteuerungsgruppe.
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.
runOnFirstFix
? Da dies das Ereignis ist, das ausgelöst wird, wenn das Gerät zum ersten Mal eine GPS-Position empfängt, getMyLocation
sollte es auf jeden Fall einen Wert zurückgeben , falls dies jemals ausgelöst wird .
Für den neuen Emulator:
http://developer.android.com/tools/devices/emulator.html#extended
Klicken Sie grundsätzlich auf die Schaltfläche mit den drei Punkten in den Emulator-Steuerelementen (rechts neben dem Emulator), um ein Menü zu öffnen, in dem Sie den Emulator einschließlich der Position steuern können
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:
Verwenden des Befehls "geo" in der Emulatorkonsole
So senden Sie Scheinstandortdaten über die Befehlszeile:
Starten Sie Ihre Anwendung im Android-Emulator und öffnen Sie ein Terminal / eine Konsole im Verzeichnis / tools Ihres SDK.
Stellen Sie eine Verbindung zur Emulatorkonsole her:
telnet localhost 5555
(Ersetzen Sie 5555 durch den Port, auf dem Ihr Emulator ausgeführt wird.)
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
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()
Ich benutze die Eclipse Plug DDMS-Funktion, um GPS zu senden.
Unter Linux, wo Kommunikationsports blockiert sind. Navigieren Sie im Terminal zum Ordner "platform-tools" android sdk
und lösen Sie den folgenden Befehl aus:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
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.
Die folgende Lösung hat bei mir funktioniert - Befehlszeile öffnen und schreiben:
adb emu geo fix [longtitude] [latitude]
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!
Sehen Abrufen des Benutzerstandorts
Schauen Sie unter Bereitstellen von Mock-Standortdaten nach . Sie finden die Lösung dafür.
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
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.
Wenn Sie Android Studio (1.3) verwenden:
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 emu
gearbeitet hätte.
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>
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.
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.
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.
Sie können einen Emulator wie Genymotion verwenden, der Ihnen die Flexibilität gibt, Ihren aktuellen GPS-Standort usw. zu emulieren.
Für Android Studio gibt es ein Plugin namens "Mock Location Plugin". Mit diesem Plugin können Sie mehrere Punkte emulieren. Eine ausführliche Bedienungsanleitung finden Sie unter folgendem Link: Android Studio. Simulieren Sie mehrere GPS-Punkte mit dem Mock Location Plugin
Ö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
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!).
~