521 Stimmen

Wie emuliert man den GPS-Standort im Android-Emulator?

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?

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.

1voto

Maik Punkte 218

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.

1voto

ssgao Punkte 4661

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

Fügen Sie in Ihrer Android Manifest.xml die folgenden beiden Links außerhalb des Anwendungstags, aber innerhalb Ihres Manifesttags hinzu

1voto

Öffnen Sie Android Studio->Tools-Menü->Android-> Android Device Monitor->Emulator-Registerkarte->Standortsteuerung->Geben Sie Ihren gewünschten Breiten- und Längengrad ein und überprüfen Sie Ihr Projekt nach Bedarf

0 Stimmen

Sie können einen festen Standortwert (Breitengrad & Längengrad) festlegen, welchen Standort Sie direkt im Codierungsteil überprüfen müssen?

1voto

Gerhard Wesp Punkte 309

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.

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

1voto

draekko Punkte 141

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.com

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.

Powered by:

X