Voglio ottenere longitudine e latitudine nell'emulatore Android per i test.
Qualcuno può guidarmi come raggiungere questo obiettivo?
Come posso impostare la posizione dell'emulatore su una posizione di prova?
Voglio ottenere longitudine e latitudine nell'emulatore Android per i test.
Qualcuno può guidarmi come raggiungere questo obiettivo?
Come posso impostare la posizione dell'emulatore su una posizione di prova?
Risposte:
È possibile connettersi all'emulatore tramite Telnet. Hai quindi una console di emulazione che ti consente di inserire determinati dati come geo fix, rete ecc.
Come utilizzare la console è ampiamente spiegato qui . Per connettersi alla console, aprire una riga di comando e digitare
telnet localhost 5554
È quindi possibile utilizzare il comando geo per impostare latitudine, longitudine e, se necessario, altitudine sul dispositivo che viene passato a tutti i programmi utilizzando il provider di localizzazione GPS. Vedi il link sopra per ulteriori istruzioni.
Il comando specifico da eseguire nella console è
geo fix <longitude value> <latitude value>
Ho trovato questo sito utile per trovare un lat / lng realistico: http : //itouchttp/latlong.html
Se hai bisogno di più di una coordinata puoi usare anche un file kml con una rotta, che è un po 'descritto in questo articolo . Non riesco a trovare una fonte migliore al momento.
geo fix
comando è disponibile solo se auth
prima tu . Può essere interessante notare ...
Nessuno qui ha menzionato la soluzione integrata dell'emulatore stesso, quindi per i futuri visitatori, vorrei condividerla con gli elementi visivi.
Innanzitutto, esegui l'emulatore Android e fai clic sul pulsante del menu (3 punti) mostrato di seguito:
Quindi dal riquadro sinistro, selezionare Posizione e modificare le coordinate in base alle proprie esigenze. Dopo aver premuto il pulsante Invia , le modifiche diventeranno immediatamente effettive (ti consiglio di aprire Google Maps per una migliore comprensione).
Versione Android Studio: 2.3.3
Inoltre, per fare in modo che le tue diverse posizioni arrivino all'applicazione in tempo reale, puoi utilizzare il file GPX. È molto semplice creare questo file dal link di direzione di Google Map:
Utilizzare il pulsante "Carica GPS / KML" per caricare il file creato nell'emulatore, selezionare la velocità e premere il pulsante di riproduzione verde in basso. Le posizioni verranno inviate in tempo reale, come mostrato nell'immagine seguente.
Stavo cercando un modo migliore per impostare le coordinate GPS dell'emulatore piuttosto che usare geo fix
e determinare manualmente le coordinate specifiche di latitudine e longitudine.
Impossibile trovare nulla, ho messo insieme un piccolo programma che utilizza GWT e l'API di Google Maps per avviare uno strumento di mappa basato su browser per impostare la posizione GPS nell'emulatore:
Speriamo che possa essere utile per aiutare gli altri che senza dubbio inciamperanno anche in questa difficoltà / domanda.
ConnectionRefused
messaggio se lancio l'emulatore GPS prima di avviare il dispositivo virtuale Android. Nella parte superiore del mio browser si dice anche "Errore durante la connessione sulla porta 5554 ..." Tutto funziona
geo fix 42,42 42,42 42
virgola anziché un punto.
Se stai usando Eclipse
, vai a Window->Open Perspective->DDMS
, quindi digita uno Location Controls
e premi Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
. Qualche idea sul perché non funzioni? Sto usando il Nexus 4 AVD predefinito
Per gli utenti di Android Studio:
eseguire l'emulatore,
Quindi vai a Tools -> Android ->Android device monitor
aprire la Emulator Control
scheda e utilizzare il gruppo dei controlli di posizione.
Supponendo che tu abbia una mapview impostata e funzionante:
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();
}
});
Avrai bisogno della seguente autorizzazione nel tuo manifest:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
E per inviare coordinate simulate all'emulatore da Eclipse, vai al menu "Finestra", seleziona "Mostra vista"> "Altro"> "Controllo emulatore" e puoi inviare le coordinate dal riquadro di controllo dell'emulatore che appare.
runOnFirstFix
? Perché questo è l'evento che viene generato quando il dispositivo riceve per la prima volta la posizione GPS, quindi se mai sollevato, getMyLocation
dovrebbe sicuramente restituire un valore.
Per il nuovo emulatore:
http://developer.android.com/tools/devices/emulator.html#extended
Fondamentalmente, fai clic sul pulsante dei tre punti nei controlli dell'emulatore (a destra dell'emulatore) e si aprirà un menu che ti permetterà di controllare l'emulatore inclusa la posizione
1. Utenti di Android Studio.
Dopo aver eseguito l'emulatore, vai su Strumenti-> Android-> Monitor dispositivo Android
Fare clic sulla modifica della scheda Controllo emulatore dal gruppo dei controlli di posizione.
2. Utenti Eclipse.
Prima in Eclipse nel menu Selezionare "Finestra", quindi selezionare "Apri prospettiva", quindi selezionare "DDMS". cioè Finestra-> Apri prospettiva-> DDMS.
Vedrai sul pannello Dispositivi lato sinistro e sul lato destro vedrai diverse schede. Selezionare la scheda "Controllo emulatore".
In fondo vedrai il pannello di controllo della posizione. Seleziona la scheda "Manuale".
Inserisci Longitudine e Latitudine nelle caselle di testo, quindi fai clic sul pulsante Invia. Invierà la posizione al tuo emulatore e all'applicazione.
3. Utilizzo di telnet.
Nel comando Esegui digitare questo.
telnet localhost 5554
Se non si utilizza Windows, è possibile utilizzare qualsiasi client Telnet.
Dopo aver effettuato la connessione con telnet, utilizzare il comando seguente per inviare la propria posizione all'emulatore.
geo fix long lat
geo fix -121.45356 46.51119 4392
4. Utilizzare lo strumento di Google Maps basato sul browser
Esiste un programma che utilizza GWT e l'API di Google Maps per avviare uno strumento di mappa basato su browser per impostare la posizione GPS nell'emulatore:
Utilizzo del comando "geo" nella console dell'emulatore
Per inviare dati di posizione fittizi dalla riga di comando:
Avviare l'applicazione nell'emulatore Android e aprire un terminale / console nella directory / strumenti dell'SDK.
Connettiti alla console dell'emulatore:
telnet localhost 5555
(Sostituisci 5555 con qualsiasi porta su cui è in esecuzione l'emulatore)
Invia i dati sulla posizione: * correzione geografica per inviare una posizione geografica fissa.
Questo comando accetta una longitudine e una latitudine in gradi decimali e un'altitudine opzionale in metri. Per esempio:
geo fix -121.45356 46.51119 4392
Ho scritto uno script Python per inviare le posizioni GPS all'emulatore tramite Telnet. Definisce una fonte e una posizione di destinazione. C'è anche un offset di tempo che ti consente di controllare per quanto tempo verranno inviate le coordinate al dispositivo. Una posizione viene spinta una volta al secondo.
Nell'esempio seguente la sceneggiatura si sposta da Berlino ad Amburgo in 120 secondi. Una posizione passo / gps al secondo con distanze casuali.
#!/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()
Uso la funzione DDMS plug eclipse per inviare il GPS.
In Linux dove le porte di comunicazione sono bloccate. navigare all'interno del terminale nella cartella degli strumenti della piattaforma all'interno android sdk
ed eseguire questo comando:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
In Mac, Linux o Cygwin:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
Questo ti metterà a Città del Messico. Cambia la tua longitudine / latitudine / altitudine di conseguenza. Questo dovrebbe bastare se non sei interessato a nmea.
La seguente soluzione ha funzionato per me: apri la riga di comando e scrivi:
adb emu geo fix [longtitude] [latitude]
Finalmente con l'ultima versione di Android Studio 4 e il suo nuovo aggiornamento Emulator 23/10/2019 diventa più facile. Avvia il tuo emulatore e vai ai parametri dell'emulatore ...> nella scheda "Percorsi" puoi scegliere due punti sulla mappa da / a e iniziare un nuovo percorso con una velocità di riproduzione regolabile che può andare a più di 1000 km / h!
Vedere Come ottenere la posizione dell'utente
Guarda in Fornire dati sulla posizione fittizia . Troverai la soluzione per questo.
Prima vai nella sezione DDMS della tua eclisse. Quindi apri il controllo dell'emulatore .... Vai alla sezione manuale imposta lat e long e poi premi il pulsante Invia
Stavo cercando di impostare la correzione geografica tramite adb per molti punti e non riuscivo a visualizzare i dati GPS sulla mia app. Ma quando ho provato ad aprire DDMS, selezionando il processo della mia app e inviando le coordinate tramite la scheda di controllo dell'emulatore, ha funzionato immediatamente.
Se stai usando Android Studio (1.3):
Trasforma la risposta di Alberto Gaona in una riga
token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n geo fix 96.0290791 16.9041016 \n exit") - | nc localhost 5554
5554 è il numero di porta dell'emulatore mostrato in adb devices
.
Sarebbe stato meglio se adb emu
funzionasse.
Se le soluzioni precedenti non funzionano. Prova questo:
All'interno del tuo Manifest.xml di Android, aggiungi i seguenti due link ESTERNI del tag dell'applicazione, ma ovviamente all'interno del tuo tag manifest
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
Non sono riuscito a ottenere una correzione GPS sull'emulatore quando l'emulatore stava eseguendo un'immagine Android senza API di Google. Non appena ho cambiato l'immagine per contenere le API di Google, tutti i modi qui indicati per far funzionare una correzione GPS.
Assicurati di selezionare un'immagine con le API di Google durante la creazione di AVD.
La risposta più volte già menzionata per utilizzare il comando shell " geo fix ... " è la risposta corretta. Ma nel caso in cui usi LocationClient.getLastLocation () per recuperare i tuoi dati, vale la pena ricordare che all'inizio non funzionerà. La classe LocationClient utilizza il servizio Google Play per recuperare le coordinate. Per me questo ha iniziato a funzionare dopo aver eseguito l'app delle mappe degli emulatori una volta. Durante il primo avvio ti viene chiesto di consentire alle app di Google di accedere alla tua posizione, il che credo sia il trucco.
Per un mio progetto, ho sviluppato un servizio online in grado di fornire una posizione simulata all'emulatore Android.
Utilizza geo nmea piuttosto che geo fix che consente di impostare velocità, rotta, tempo preciso ecc. Oltre a lat / lon.
Il servizio richiede l'utilità della riga di comando nc (netcat) e nient'altro.
Puoi usare un emulatore come genymotion che ti dà la flessibilità di emulare la tua posizione GPS attuale, ecc.
Esiste un plug-in per Android Studio chiamato "Mock Location Plugin". Puoi emulare più punti con questo plugin. Puoi trovare un manuale d'uso dettagliato in questo link: Android Studio. Simula più punti GPS con il plugin Mock Location
Apri Android studio-> Menu Strumenti-> Android-> Monitor dispositivo Android-> Scheda Emulatore-> Controllo posizione-> Imposta la latitudine e la longitudine richieste e controlla il tuo progetto secondo le tue necessità
In eclissi:
Potrebbe essere necessario trascinare la finestra DDMS verso il basso. I "Controlli posizione" si trovano in "Azioni di telefonia" e possono essere nascosti da una vista console di dimensioni normali (la barra con console, LogCat ecc. Potrebbe coprirla!)
~