Jak emulować lokalizację GPS w emulatorze Androida?


445

Chcę uzyskać długość i szerokość geograficzną w emulatorze Androida do testowania.

Czy ktoś może mi pomóc, jak to osiągnąć?

Jak ustawić lokalizację emulatora na pozycję testową?



Możesz zainstalować jedną z wielu fałszywych aplikacji lokalizacyjnych w Sklepie Play.
whoKnows,

Odpowiedzi:


443

Możesz połączyć się z emulatorem przez Telnet. Następnie masz konsolę emulatora, która pozwala wprowadzać określone dane, takie jak poprawki geo, sieć itp.

Sposób korzystania z konsoli został szczegółowo wyjaśniony tutaj . Aby połączyć się z konsolą, otwórz wiersz poleceń i wpisz

telnet localhost 5554

Następnie możesz użyć polecenia geo, aby ustawić szerokość, długość i, w razie potrzeby, wysokość na urządzeniu przekazywanym do wszystkich programów korzystających z dostawcy lokalizacji GPS. Zobacz link powyżej, aby uzyskać dalsze instrukcje.

Konkretne polecenie do uruchomienia w konsoli to

geo fix <longitude value> <latitude value>

Uznałem tę stronę za przydatną do znalezienia realistycznej wersji językowej: http://itouchmap.com/latlong.html

Jeśli potrzebujesz więcej niż jednej współrzędnej, możesz użyć pliku kml z trasą, jest to nieco opisane w tym artykule . W tej chwili nie mogę znaleźć lepszego źródła.


13
za pomocą poprawek geograficznych ustawiłem także pozorną szerokość i długość geograficzną, wciąż uzyskując zerową lokalizację.
UMAR

2
lub w prosty sposób włącz GPS w emulatorze i przejdź do kontroli emulatora, podaj manekina lat, długie wartości i wyślij te wartości do emulatora jako lokalizację GPS.
UMAR

35
adb emu geo fix 30.219470 -97.745361
Bryan Rehbein

12
Uważaj na kolejność, lon przed latem!
Christoph

14
geo fixPolecenie jest dostępne tylko wtedy, gdy authpierwszy. Może warto wspomnieć ...
aroth

126

Nikt tutaj nie wspomniał o wbudowanym rozwiązaniu samego emulatora, więc dla przyszłych gości chciałbym podzielić się nim z obrazami.

Najpierw uruchom emulator Androida i kliknij przycisk menu (3 kropki) pokazany poniżej:

emulator z przyciskiem menu

Następnie w lewym okienku wybierz Lokalizacja i zmień współrzędne zgodnie z własnymi potrzebami. Po naciśnięciu przycisku Wyślij zmiany zaczną obowiązywać (zalecamy otwarcie Map Google w celu lepszego zrozumienia).

wprowadź opis zdjęcia tutaj

Wersja Androida Studio: 2.3.3

Ponadto, aby różne lokalizacje przychodziły do ​​Twojej aplikacji w czasie rzeczywistym, możesz użyć pliku GPX. Utworzenie tego pliku z linku kierunkowego Mapy Google jest bardzo proste:

  1. Przejdź do mapy google, wybierz lokalizację, a następnie naciśnij „Wskazówki” i wprowadź drugą lokalizację.
  2. Po utworzeniu trasy skopiuj link z przeglądarki
  3. Przejdź do tej witryny: https://mapstogpx.com i wklej link do pola „Let's Go”
  4. Naciśnij przycisk „Let's Go”, a plik GPX zostanie pobrany

Użyj przycisku „Załaduj GPS / KML”, aby załadować utworzony plik do emulatora, wybierz prędkość i naciśnij zielony przycisk odtwarzania na dole. Lokalizacje zostaną wysłane w czasie rzeczywistym, jak pokazano na poniższym obrazku.

wprowadź opis zdjęcia tutaj


w tym rozwiązaniu potrzebujesz usług odtwarzania w emulatorze?
Kevan Aghera,

Nie wydaje mi się
eden

kiedy otwieram aplikację w emulatorze klient google api null, więc nie mogę załadować mapy w emulatorze. i urządzenie mobilne jest dla mnie w porządku.
Kevan Aghera,

4
Potwierdzam, że nie ma potrzeby logowania się na konto Google, aby to zrobić. Fajne!
xarlymg89

3
Musiałem zrestartować emulowany system operacyjny, aby rozpoznać nową lokalizację.
Nate Whittaker,

109

Szukałem lepszego sposobu ustawienia współrzędnych GPS emulatora niż używanie geo fixi ręczne określanie konkretnych współrzędnych szerokości i długości geograficznej.

Nie mogąc nic znaleźć, stworzyłem mały program, który korzysta z GWT i interfejsu API Google Maps, aby uruchomić narzędzie do mapowania w przeglądarce, aby ustawić lokalizację GPS w emulatorze:

emulator gps dla Androida

Mam nadzieję, że może być przydatny, aby pomóc innym, którzy bez wątpienia natkną się również na tę trudność / pytanie.


wow, dziękuję! Instalator działał dobrze, ale nie byłem w stanie zarządzać połączeniem z emulatorem -> log print java.net.ConnectionRefused. potem spróbowałem telnet localhost 5554 (z terminala) i zadziałało .. czy ktoś jeszcze przetestował twój emulator na komputerze Mac?
ottel142

1
Nie testowałem tego, ale wygląda to tak niesamowicie, że myślę, że Google powinien powiedzieć o tym światu. Proste pomysły są zawsze najlepsze. Dlaczego nikt o tym nie pomyślał?
tiktak

@ ottel142 - Tak, tak naprawdę działam na komputerze Mac bez tego problemu (używam Chrome na Mavericks). Widzę więc ten ConnectionRefusedkomunikat, jeśli uruchomię emulator GPS przed uruchomieniem urządzenia wirtualnego z Androidem. Na górze mojej przeglądarki jest też napisane „Błąd nawiązywania połączenia na porcie 5554 ...” Wszystko działa dobrze, jeśli
kliknę

Dokładnie to, czego potrzebowałem.
David

To dobry program, ale lokalizacja systemu zmienia sposób działania pływaków. W moim systemie musi to być geo fix 42,42 42,42 42przecinek zamiast kropek.
nurettin

81

Jeśli używasz Eclipse, przejdź do Window->Open Perspective->DDMS, a następnie wpisz jeden Location Controlsi naciśnij Send.


8
To zdecydowanie najłatwiejsza metoda, jaką widziałem. Upewnij się, że skonfigurowałeś AVD z obsługą GPS, a następnie w perspektywie DDMS kliknij emulator, który jest uruchomiony w obszarze Urządzenia, wybierz kartę Kontrola emulatora w środkowo-prawym panelu, a na dole znajduje się sekcja Kontrola lokalizacji, o której wspomniał SteveCav (Używanie Eclipse Juno 4.2 dla programistów Java z najnowszym ADT). Mój panel Kontroli lokalizacji był nawet wstępnie załadowany danymi lokalizacji.
Steven Magana-Zook

świetna odpowiedź! działa z każdym ide, ponieważ ddms jest częścią sdk (twosdkfolder / tools /)
Zarokka

1
To ani powyższe rozwiązanie telnet działało dla mnie. Próbuję uzyskać moją lokalizację w ten sposób, ale nadal jest ona pusta. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
crowmagnumb

Kiedy używam „Kontroli lokalizacji” w DDMS, pojawia się następujący błąd podczas próby wysłania Unable to send command to the emulator. Wiesz, dlaczego to nie działa? Używam domyślnego Nexusa 4 AVD
emersonthis

1
Nie jestem w stanie tego zrobić, kontrole lokalizacji są wyszarzone
Utsav Gupta

33

Dla użytkowników Androida Studio:

uruchom emulator,

Następnie przejdź do Tools -> Android ->Android device monitor

otwórz Emulator Controlkartę i użyj grupy kontroli lokalizacji.


W moim przypadku wszystkich plików nie można edytować. Masz pomysł ?
Olkunmustafa

4
@MustafaOlkun Prawdopodobnie oznacza to, że sam emulator ma te elementy sterujące. Poszukaj „...” obok emulatora.
Justin

3
Mam ten sam problem. Nie można ich edytować. i tak jest „...”. Jednak gdy umieszczam cokolwiek tam i
wysyłam

14

Zakładając, że masz skonfigurowany i uruchomiony widok mapy:

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

Będziesz potrzebować następującego pozwolenia w swoim manifeście:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Aby wysłać symulowane współrzędne do emulatora z Eclipse, przejdź do menu „Okno”, wybierz „Pokaż widok”> „Inne”> „Sterowanie emulatorem” i możesz wysłać współrzędne z wyświetlonego panelu sterowania emulatora.


3
ale mój przyjacielu, gdzie jest długość i szerokość geograficzna?
UMAR

1
próbowałem użyć tej i wysyłając pozorne wartości do kontroli emulatora, ale kiedy nacisnę przycisk wysyłania, nie robi nic, nic nie pojawia się, nic nie potwierdza wartości wysłanych lub nie. Seocnd rzecz GeoPoint g = myLocation.getMyLocation (); zwraca wartość null.
UMAR

Czy na pewno używasz go w sobie runOnFirstFix? Ponieważ jest to zdarzenie, które jest wywoływane, gdy urządzenie po raz pierwszy odbiera pozycję GPS, więc jeśli kiedykolwiek zostanie podniesione, getMyLocationpowinno zdecydowanie zwrócić wartość.
David Hedlund,


13

1. Użytkownicy Androida Studio.

Po uruchomieniu emulatora goto Narzędzia-> Android-> monitor urządzenia z Androidem

Kliknij zmianę zakładki Emulator w grupie kontrolek lokalizacji.

2. Użytkownicy Eclipse.

Najpierw w menu Eclipse In Wybierz „Window”, następnie wybierz „Open Perspective”, a następnie wybierz „DDMS”. tj. Window-> Open Prespective-> DDMS.

Zobaczysz w panelu Urządzenia po lewej stronie, a po prawej stronie zobaczysz różne zakładki. Wybierz zakładkę „Sterowanie emulatorem”.

Na dole zobaczysz Panel Kontroli lokalizacji. Wybierz zakładkę „Ręcznie”.

Wpisz Długość i szerokość geograficzną w polach tekstowych, a następnie kliknij przycisk Wyślij. Wyśle Ci pozycję do emulatora i aplikacji.

3. Korzystanie z telnet.

W poleceniu uruchomienia wpisz to.

telnet localhost 5554

Jeśli nie korzystasz z systemu Windows, możesz użyć dowolnego klienta Telnet.

Po połączeniu z telnet użyj poniższego polecenia, aby wysłać swoją pozycję do emulatora.

geo fix long lat    
geo fix -121.45356 46.51119 4392

4. Użyj narzędzia Google Maps opartego na przeglądarce

Istnieje program, który korzysta z GWT i interfejsu API Google Maps do uruchomienia narzędzia mapy opartego na przeglądarce, aby ustawić lokalizację GPS w emulatorze:

emulator gps dla Androida


Ta pierwsza opcja działała dla mnie z jedną małą zmianą. Nie mogłem otworzyć okna DDMS z Eclipse, właśnie dostałem pustą szarą stronę. Ale kiedy miałem uruchomiony emulator, gdybym otworzył DDMS z wiersza poleceń (C: \ Program Files \ Android \ android-sdk \ tools \ ddms), wtedy zobaczyłem okno, które opisałeś z urządzeniami po lewej stronie i „Sterowanie emulatorem ”po prawej stronie. Dzięki!
Eric Barr,

10

Za pomocą polecenia „geo” w konsoli emulatora

Aby wysłać fałszywe dane o lokalizacji z wiersza polecenia:

  1. Uruchom aplikację w emulatorze Androida i otwórz terminal / konsolę w katalogu / tools pakietu SDK.

  2. Połącz z konsolą emulatora:

    telnet localhost 5555 (Zamień 5555 na dowolny port, na którym działa emulator)

  3. Wyślij dane lokalizacji: * poprawka geograficzna, aby wysłać ustaloną lokalizację geograficzną.

    To polecenie akceptuje długość i szerokość geograficzną w stopniach dziesiętnych oraz opcjonalną wysokość w metrach. Na przykład:

    geo fix -121.45356 46.51119 4392

8

Napisałem skrypt Pythona, aby wypychać lokalizacje GPS do emulatora przez telnet. Określa źródło i lokalizację docelową. Istnieje również przesunięcie czasowe, które pozwala kontrolować, jak długo współrzędne będą wypychane do urządzenia. Jedna lokalizacja jest wypychana raz na sekundę.

W poniższym przykładzie skrypt przenosi się z Berlina do Hamburga w 120 sekund. Lokalizacja krok / GPS na sekundę z losowymi odległościami.

#!/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()

Działa jak marzenie! Dzięki za udostępnienie.
Alberto Gaona,

Mmmm Wydaje mi się, że wystąpił niewielki błąd: o ile wiem, komunikat o poprawce geograficznej otrzymuje długość i szerokość geograficzną, w następującej kolejności: wysyłasz je na odwrót. Zobacz odpowiedzi powyżej.
Alberto Gaona,

Nie działa. Emulator nasłuchuje na porcie, ale niczego nie odbiera.
Durga Swaroop,


5

W systemie Linux, gdzie porty komunikacyjne są zablokowane. przejdź do terminala do folderu platformy-narzędzia w środku android sdki uruchom następujące polecenie:

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

5

W komputerach Mac, Linux lub Cygwin:

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

To umieści cię w Mexico City. Zmień odpowiednio długość i szerokość geograficzną / wysokość. To powinno wystarczyć, jeśli nie jesteś zainteresowany nmea.


Może być konieczne dostosowanie 5554 do bieżącego portu nasłuchiwania emulatora.
Alberto Gaona,

5

Dla mnie zadziałało następujące rozwiązanie - otwórz wiersz poleceń i napisz:

adb emu geo fix [longtitude] [latitude]

5

Wreszcie dzięki najnowszej wersji Androida Studio 4 i jego nowej aktualizacji emulatora 23.10.2019 stało się łatwiejsze. Uruchom emulator i przejdź do parametrów emulatora ...> w zakładce „Trasy” możesz wybrać dwa punkty na mapie od / do i rozpocząć nową trasę z regulowaną prędkością odtwarzania, która może przekroczyć 1000 km / h!

wprowadź opis zdjęcia tutaj


więc jak uzyskać aktualne lat lng?
Mahmoud Ayman


4

Najpierw przejdź do sekcji DDMS w swoim zaćmieniu Niż otwórz emulator Sterowanie .... Przejdź do sekcji Ręczne ustaw długość i długość, a następnie naciśnij przycisk Wyślij


3

Próbowałem ustawić poprawkę geograficzną za pomocą adb dla wielu punktów i nie mogłem uzyskać w mojej aplikacji żadnych danych GPS. Ale kiedy próbowałem otworzyć DDMS, od razu wybrałem proces mojej aplikacji i wysłałem współrzędne przez kartę kontrolną emulatora.


Nie musisz określać procesu ... A może DDMS w 2010 roku wymaga tego.

3

Dalvik Debug Monitor> Wybierz Emulator> Karta Sterowanie emulatorem> Sterowanie położeniem.

DDMS - android_sdk / tools / ddms LUB android_sdk / tools / monitor


2

Jeśli używasz Eclipse, a następnie kontrolera Emulator, możesz ręcznie ustawić szerokość i długość geograficzną oraz uruchomić aplikację opartą na mapie w emulatorze


2

Jeśli używasz Androida Studio (1.3):

  • Kliknij menu „Narzędzia”
  • "Android"
  • „Monitor urządzenia z Androidem”
  • kliknij aktualny emulator
  • Zakładka „Sterowanie emulatorem”
  • przejdź do „Kontroli lokalizacji” i wpisz Lat i Lon

2

Po prostu ułóż odpowiedź Alberto Gaony w jednym wierszu

token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n  geo fix 96.0290791 16.9041016  \n exit") - | nc localhost 5554

5554 to numer portu emulatora pokazany w adb devices.

Byłoby lepiej, gdyby adb emupraca.


bardzo przydatna jedna wkładka! w moim przypadku musiałem usunąć spacje między \ n: token = $ (cat ~ / .emulator_console_auth_token); cat <(echo -e "token $ auth \ ngeo fix 96.0290791 19.9041016 \ nexit") - | nc localhost 5554
Jeremie

1

Jeśli powyższe rozwiązania nie działają. Spróbuj tego:

Wewnątrz Androida Manifest.xml dodaj dwa poniższe linki POZA tagiem aplikacji, ale oczywiście w tagu manifestu

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>

1

Nie mogłem uzyskać poprawki GPS na emulatorze, gdy emulator uruchomił obraz Androida bez interfejsów API Google. Gdy tylko zmieniłem obraz, aby zawierał interfejsy API Google, wszystkie wymienione tutaj sposoby uzyskania poprawek GPS działały.

Upewnij się, że wybierasz obraz z interfejsami API Google podczas tworzenia AVD.


co rozumiesz przez Image i podczas tworzenia AVD, jak wybrać obraz z interfejsami API Google? nie ma takich opcji podczas tworzenia AVD w środowisku Eclipse.
user1911703

Upewnij się, że pobrałeś obrazy z interfejsami API Google za pomocą menedżera Android SDK.
dvim

1

Wspomniana już wielokrotnie odpowiedź na polecenie powłoki „ geo fix ... ” jest poprawną odpowiedzią. Ale jeśli używasz LocationClient.getLastLocation () do pobierania danych, warto wspomnieć, że na początku nie będzie działać. Klasa LocationClient używa usługi Google Play do pobierania współrzędnych. Dla mnie to zaczęło działać po jednokrotnym uruchomieniu aplikacji map emulatorów. Podczas pierwszego uruchomienia zostaniesz poproszony o zezwolenie aplikacjom Google na dostęp do Twojej lokalizacji, co chyba załatwia sprawę.


1

Dla własnego projektu opracowałem usługę online, która może zapewnić symulowaną lokalizację emulatora Androida.

Używa geo nmea zamiast geo fix, co pozwala mu ustawić prędkość, kurs, dokładny czas itp. Oprócz tylko lat / lon.

Usługa wymaga narzędzia wiersza polecenia nc (netcat) i niczego więcej.

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




1

Otwórz studio Android-> menu Narzędzia-> Android-> Monitor urządzeń z Androidem-> Karta Emulator-> Kontrola lokalizacji-> Ustaw wymaganą szerokość i długość geograficzną i sprawdź projekt zgodnie z potrzebami


możesz ustawić statyczną wartość lokalizacji (szerokość i długość), którą lokalizację potrzebujesz sprawdzić bezpośrednio w części kodującej?
Premkumar Manipillai

0

W zaćmieniu:

Może być konieczne przeciągnięcie okna DDMS w dół. „Sterowanie lokalizacją” znajduje się w „Akcjach telefonicznych” i może być ukryte przez widok normalnej wielkości konsoli (pasek z konsolą, LogCat itp. Może to zasłaniać!)

~


Wewnątrz DDMS znalazłem pod kontrolą Emulatora. Karta poniżej Kontrolki lokalizacji.
user914425,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.