Ich möchte Längen- und Breitengrade im Android-Emulator für Tests erhalten.
Kann mir jemand erklären, wie ich das erreichen kann?
Wie setze ich den Standort des Emulators auf eine Testposition?
Ich möchte Längen- und Breitengrade im Android-Emulator für Tests erhalten.
Kann mir jemand erklären, wie ich das erreichen kann?
Wie setze ich den Standort des Emulators auf eine Testposition?
Angenommen, Sie haben eine MapView eingerichtet und zum Laufen gebracht:
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:
Und um gefälschte Koordinaten an den Emulator von Eclipse zu senden, gehen Sie zum "Fenster" Menü, wählen Sie "Ansicht anzeigen" > "Andere" > "Emulatorsteuerung" und Sie können Koordinaten aus dem Emulatorsteuerungsfenster senden, das erscheint.
Ich habe versucht, dies zu verwenden und Mock-Werte an den Emulator zu senden, aber wenn ich auf die Senden-Schaltfläche drücke, passiert nichts. Es erscheint keine Nachricht zur Bestätigung, ob die Werte gesendet wurden oder nicht. Ein weiteres Problem ist, dass GeoPoint g = myLocation.getMyLocation(); den Wert null zurückgibt.
Verwendung des Befehls "geo" in der Emulator-Konsole
Um Mock-Standortdaten von der Befehlszeile zu senden:
Starten Sie Ihre Anwendung im Android-Emulator und öffnen Sie ein Terminal/Fenster in Ihrem SDK-/Tools-Verzeichnis.
Verbinden Sie sich mit der Emulator-Konsole:
telnet localhost 5555
(Ersetzen Sie 5555 durch den Port, auf dem Ihr Emulator läuft)
Senden Sie die Standortdaten: * geo fix für das Senden eines festen Geo-Standorts.
Dieser Befehl akzeptiert eine Längen- und Breitengrad in Dezimalgraden sowie optional eine Höhe in Metern. Zum Beispiel:
geo fix -121.45356 46.51119 4392
Ich habe ein Python-Skript geschrieben, um GPS-Standorte über Telnet an den Emulator zu senden. Es definiert einen Ursprungs- und einen Zielstandort. Es gibt auch einen Zeitversatz, der es ermöglicht, zu kontrollieren, wie lange Koordinaten an das Gerät gesendet werden. Ein Standort wird einmal pro Sekunde übertragen.
In dem untenstehenden Beispiel bewegt sich das Skript in 120 Sekunden von Berlin nach Hamburg. Ein Schritt/GPS-Standort pro Sekunde mit zufälligen Entfernungen.
#!/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()
Mmmmm. Ich glaube, es gibt einen leichten Fehler: Soweit ich weiß, erhält die Geo-Fix-Nachricht Längen- und Breitengrad in dieser Reihenfolge: Du sendest sie andersherum. Siehe Antworten oben.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Wenn Sie Genymotion verwenden : stackoverflow.com/questions/30709329/…
1 Stimmen
Sie können eine der vielen gefälschten Standort-Apps im Play Store installieren.