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.

14voto

David Hedlund Punkte 125085

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.

3 Stimmen

Aber mein Freund, wo sind Längengrad und Breitengrad?

1 Stimmen

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.

0 Stimmen

Sind Sie sicher, dass Sie es innerhalb von runOnFirstFix verwenden? Denn das ist das Ereignis, das auftritt, wenn das Gerät zum ersten Mal die GPS-Position erhält. Wenn das überhaupt aufgerufen wird, sollte getMyLocation definitiv einen Wert zurückgeben.

10voto

Dan Zhao Punkte 101

Verwendung des Befehls "geo" in der Emulator-Konsole

Um Mock-Standortdaten von der Befehlszeile zu senden:

  1. Starten Sie Ihre Anwendung im Android-Emulator und öffnen Sie ein Terminal/Fenster in Ihrem SDK-/Tools-Verzeichnis.

  2. Verbinden Sie sich mit der Emulator-Konsole:

    telnet localhost 5555 (Ersetzen Sie 5555 durch den Port, auf dem Ihr Emulator läuft)

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

8voto

user937284 Punkte 2268

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()

0 Stimmen

Funktioniert wie ein Charme! Vielen Dank fürs Teilen.

0 Stimmen

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.

0 Stimmen

Funktioniert nicht. Der Emulator empfängt zwar Signale am Port, aber er empfängt nichts.

6voto

abhishek singh Punkte 51

In Linux, wo Kommunikationsports blockiert sind, navigieren Sie das Terminal zum platform-tools-Ordner im Android SDK und führen Sie diesen Befehl aus:

./adb -s #{device_name} emu geo fix #{longitude} #{latitude}

6voto

Alberto Gaona Punkte 2397

Auf Mac, Linux oder Cygwin:

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

Das wird dich in Mexiko-Stadt versetzen. Passen Sie Ihre Längen-/Breitengrad/Höhe entsprechend an. Das sollte ausreichen, wenn Sie nicht an NMEA interessiert sind.

0 Stimmen

Sie müssen möglicherweise die 5554 an Ihren aktuellen Emulator-Hörport anpassen.

0 Stimmen

Wie haben Sie den Wert für verschiedene Städte gefunden? Ich versuche, den Wert von Google Maps zu kopieren und er liegt nicht im Bereich von 90 bis -90.

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