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?
Die bereits mehrfach erwähnte Antwort, die Shell-Befehl "geo fix..." zu verwenden, ist die richtige Antwort. Aber wenn Sie LocationClient.getLastLocation() zur Abfrage Ihrer Daten verwenden, ist es erwähnenswert, dass es beim ersten Mal nicht funktionieren wird. Die LocationClient-Klasse verwendet den Google Play-Dienst, um die Koordinaten abzurufen. Bei mir hat dies erst funktioniert, nachdem ich die Karten-App des Emulators einmal ausgeführt hatte. Beim ersten Start werden Sie aufgefordert, Google-Apps den Zugriff auf Ihren Standort zu erlauben, was anscheinend den Trick macht.
Für ein eigenes Projekt habe ich einen Online-Dienst entwickelt, der dem Android-Emulator eine simulierte Position bereitstellen kann.
Er verwendet geo nmea anstelle von geo fix, was es ihm ermöglicht, Geschwindigkeit, Kurs, genaue Zeit usw. festzulegen, zusätzlich zu nur Breiten- und Längengrad.
Der Dienst benötigt das nc (netcat) Befehlszeilen-Dienstprogramm und nichts weiteres.
Kann noch nicht kommentieren, also aktualisiere ich hier die Antwort von @ectomorphs, die jetzt beim Telneting erfordert, ein Auth-Token zu haben. In Linux ist das unter /home/username/.emulator_console_auth_token
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import telnetlib
from time import sleep
import random
FILE = open('/home/username/.emulator_console_auth_token', 'r')
AUTH_TOKEN = FILE.read()
FILE.close()
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("auth {0}\n".format(AUTH_TOKEN))
tn.read_until("OK", 5)
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()
Von einem Shell-Skript aus kann man die Koordinate so setzen
#!/usr/bin/env bash
export ATOKEN=`cat ~/.emulator_console_auth_token`
echo -ne "auth $ATOKEN\ngeo fix -99.133333 19.43333 2202\n" | nc localhost 5554
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.