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ą?
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ą?
Odpowiedzi:
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.
geo fix
Polecenie jest dostępne tylko wtedy, gdy auth
pierwszy. Może warto wspomnieć ...
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:
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).
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:
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.
Szukałem lepszego sposobu ustawienia współrzędnych GPS emulatora niż używanie geo fix
i 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:
Mam nadzieję, że może być przydatny, aby pomóc innym, którzy bez wątpienia natkną się również na tę trudność / pytanie.
ConnectionRefused
komunikat, 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
geo fix 42,42 42,42 42
przecinek zamiast kropek.
Jeśli używasz Eclipse
, przejdź do Window->Open Perspective->DDMS
, a następnie wpisz jeden Location Controls
i naciśnij Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
. Wiesz, dlaczego to nie działa? Używam domyślnego Nexusa 4 AVD
Dla użytkowników Androida Studio:
uruchom emulator,
Następnie przejdź do Tools -> Android ->Android device monitor
otwórz Emulator Control
kartę i użyj grupy kontroli lokalizacji.
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.
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, getMyLocation
powinno zdecydowanie zwrócić wartość.
W przypadku nowego emulatora:
http://developer.android.com/tools/devices/emulator.html#extended
Zasadniczo kliknij przycisk trzech kropek w kontrolkach emulatora (po prawej stronie emulatora), a otworzy się menu, które pozwoli ci kontrolować emulator, w tym lokalizację
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:
Za pomocą polecenia „geo” w konsoli emulatora
Aby wysłać fałszywe dane o lokalizacji z wiersza polecenia:
Uruchom aplikację w emulatorze Androida i otwórz terminal / konsolę w katalogu / tools pakietu SDK.
Połącz z konsolą emulatora:
telnet localhost 5555
(Zamień 5555 na dowolny port, na którym działa emulator)
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
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()
Używam funkcji DDMS wtyczki zaćmienia, aby wysłać GPS.
W systemie Linux, gdzie porty komunikacyjne są zablokowane. przejdź do terminala do folderu platformy-narzędzia w środku android sdk
i uruchom następujące polecenie:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
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.
Dla mnie zadziałało następujące rozwiązanie - otwórz wiersz poleceń i napisz:
adb emu geo fix [longtitude] [latitude]
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!
Zobacz Uzyskiwanie lokalizacji użytkownika
Przejrzyj część Podawanie fałszywych danych o lokalizacji . Znajdziesz na to rozwiązanie.
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
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.
Jeśli używasz Androida Studio (1.3):
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 emu
praca.
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>
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.
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ę.
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.
Możesz użyć emulatora, takiego jak genymotion, który daje elastyczność naśladowania aktualnej lokalizacji GPS itp.
Dostępna jest wtyczka do Android Studio o nazwie „Mock Location Plugin”. Za pomocą tej wtyczki możesz emulować wiele punktów. Szczegółowy podręcznik użytkowania można znaleźć pod tym linkiem: Android Studio. Symuluj wiele punktów GPS za pomocą fałszywej wtyczki lokalizacji
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
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ć!)
~