Come emulare la posizione GPS nell'emulatore Android?


445

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?



Puoi installare una delle tante app di localizzazione fittizie sul Play Store.
Chi conosce il

Risposte:


443

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


13
usando geo fix ho anche impostato finta latitudine e longitudine ottenendo comunque una posizione nulla.
UMAR,

2
o semplicemente accendi i gps nell'emulatore e vai al controllo dell'emulatore, dai lat fittizi, valori lunghi e invia che otterrai quei valori nell'emulatore come posizione gps.
UMAR,

35
adb emu geo fix 30.219470 -97.745361
Bryan Rehbein

12
Attento all'ordine, lon prima di lat!
Christoph,

14
Il geo fixcomando è disponibile solo se authprima tu . Può essere interessante notare ...
aroth

126

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:

emulatore con pulsante menu

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

inserisci qui la descrizione dell'immagine

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:

  1. Vai su google map, scegli una posizione, quindi premi "Indicazioni stradali" e inserisci la seconda posizione.
  2. Dopo aver creato il percorso, copia un collegamento dal browser
  3. Vai a questo sito Web: https://mapstogpx.com e incolla il link nella casella "Let's Go"
  4. Premi il pulsante "Let's Go" e il file GPX verrà scaricato

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.

inserisci qui la descrizione dell'immagine


in questa soluzione serve un servizio di riproduzione nell'emulatore?
Kevan Aghera,

Io non la penso così.
eden,

quando apro l'app nell'emulatore google api client null quindi non riesco a caricare la mappa nell'emulatore. e dispositivo mobile per me va bene.
Kevan Aghera,

4
Confermo che non è necessario accedere al proprio account Google per farlo. Freddo!
xarlymg89,

3
Ho dovuto riavviare il sistema operativo emulato per farlo riconoscere la nuova posizione.
Nate Whittaker,

109

Stavo cercando un modo migliore per impostare le coordinate GPS dell'emulatore piuttosto che usare geo fixe 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:

android-gps-emulatore

Speriamo che possa essere utile per aiutare gli altri che senza dubbio inciamperanno anche in questa difficoltà / domanda.


Wow grazie! l'installazione ha funzionato bene, ma non sono riuscito a gestire una connessione all'emulatore -> log prints java.net.ConnectionRefused. poi ho provato telnet localhost 5554 (dal terminale) e ha funzionato .. qualcun altro ha testato con successo il tuo emulatore su Mac?
ottel142,

1
Non l'ho provato, ma sembra così fantastico che Google dovrebbe dirlo al mondo. Le idee semplici sono sempre le migliori. Perché nessuno ci ha pensato?
tiktak,

@ ottel142 - Sì, sto correndo su un Mac senza questo problema (usando Chrome su Mavericks). Vedo quindi quel ConnectionRefusedmessaggio 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
correttamente

Esattamente quello di cui avevo bisogno.
David

Questo è un buon programma, ma la località del sistema cambia il modo in cui i float funzionano. Sul mio sistema deve essere come una geo fix 42,42 42,42 42virgola anziché un punto.
Nurettin,

81

Se stai usando Eclipse, vai a Window->Open Perspective->DDMS, quindi digita uno Location Controlse premi Send.


8
Questo è di gran lunga il metodo più semplice che abbia mai visto. Assicurati di aver configurato l'AVD con supporto GPS, quindi nella prospettiva DDMS fai clic sull'emulatore in esecuzione in Dispositivi, scegli la scheda Controllo emulatore nel riquadro centrale a destra, quindi in basso è la sezione Controlli della posizione menzionata da SteveCav (Utilizzo di Eclipse Juno 4.2 per sviluppatori Java con l'ultimo ADT). Il pannello I miei controlli di posizione è stato anche precaricato con i dati sulla posizione.
Steven Magana-Zook,

Bella risposta! funziona con qualsiasi ide perché ddms fa parte di sdk (yoursdkfolder / tools /)
Zarokka

1
Questa, né la soluzione Telnet sopra, funzionava per me. Sto cercando di ottenere la mia posizione in questo modo ma è ancora nulla. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
crowmagnumb,

Quando utilizzo "Controlli di posizione" in DDMS ricevo il seguente errore quando provo a inviare Unable to send command to the emulator. Qualche idea sul perché non funzioni? Sto usando il Nexus 4 AVD predefinito
emersonthis

1
Non riesco a farlo, i controlli delle posizioni sono disattivati
Utsav Gupta,

33

Per gli utenti di Android Studio:

eseguire l'emulatore,

Quindi vai a Tools -> Android ->Android device monitor

aprire la Emulator Controlscheda e utilizzare il gruppo dei controlli di posizione.


Nel mio caso, tutti i file non sono modificabili. Hai un'idea ?
Olkunmustafa,

4
@MustafaOlkun Probabilmente significa che l'emulatore stesso ha quei controlli su di esso. Cerca un "..." accanto all'emulatore.
Giustino,

3
Ho lo stesso problema. Non sono modificabili. e sì c'è il "...". Tuttavia quando metto qualcosa lì e
invia

14

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.


3
ma amico mio dove sono la longitudine e la latitudine ??
UMAR,

1
ho provato a usare questo ans inviando valori falsi al controllo dell'emulatore, ma quando premo il pulsante di invio non fa nulla, nessun messaggio appare per confermare i valori inviati o meno. seocnd thing GeoPoint g = myLocation.getMyLocation (); sta restituendo un valore nullo.
UMAR,

Sei sicuro di usarlo all'interno runOnFirstFix? Perché questo è l'evento che viene generato quando il dispositivo riceve per la prima volta la posizione GPS, quindi se mai sollevato, getMyLocationdovrebbe sicuramente restituire un valore.
David Hedlund,


13

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:

android-gps-emulatore


Questa prima opzione ha funzionato per me, con una piccola modifica. Non sono riuscito ad aprire la finestra DDMS da Eclipse, ho appena ricevuto una pagina grigia vuota. Ma mentre avevo l'emulatore in esecuzione, se avessi aperto DDMS da un prompt dei comandi (C: \ Programmi \ Android \ android-sdk \ tools \ ddms), avrei potuto vedere la finestra che hai descritto con Dispositivi a sinistra e "Controllo emulatore" "scheda a destra. Grazie!
Eric Barr,

10

Utilizzo del comando "geo" nella console dell'emulatore

Per inviare dati di posizione fittizi dalla riga di comando:

  1. Avviare l'applicazione nell'emulatore Android e aprire un terminale / console nella directory / strumenti dell'SDK.

  2. Connettiti alla console dell'emulatore:

    telnet localhost 5555 (Sostituisci 5555 con qualsiasi porta su cui è in esecuzione l'emulatore)

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

8

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

Funziona come un fascino! Grazie per la condivisione.
Alberto Gaona,

Mmmmm. Penso che ci sia un leggero errore: per quanto ne so il messaggio di correzione geografica ottiene Longitudine e Latitudine, in questo ordine: li stai inviando al contrario. Vedi le risposte sopra.
Alberto Gaona,

Non funziona. L'emulatore sta ascoltando sulla porta ma non sta ricevendo nulla.
Durga Swaroop,


5

In Linux dove le porte di comunicazione sono bloccate. navigare all'interno del terminale nella cartella degli strumenti della piattaforma all'interno android sdked eseguire questo comando:

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

5

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.


Potrebbe essere necessario regolare il 5554 sulla porta di ascolto dell'emulatore corrente.
Alberto Gaona,

5

La seguente soluzione ha funzionato per me: apri la riga di comando e scrivi:

adb emu geo fix [longtitude] [latitude]

5

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!

inserisci qui la descrizione dell'immagine


quindi come ottenere lat lat attuale?
Mahmoud Ayman,


4

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


3

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.


Non è necessario specificare un processo ... O forse DDMS nel 2010 richiede di farlo.

3

Dalvik Debug Monitor> Seleziona emulatore> scheda Controllo emulatore> Controlli posizione.

DDMS - android_sdk / tools / ddms O android_sdk / tools / monitor


2

Se si utilizza eclipse, quindi utilizzando il controller dell'emulatore è possibile impostare manualmente latitudine e longitudine ed eseguire l'app basata sulla mappa nell'emulatore


2

Se stai usando Android Studio (1.3):

  • Fai clic sul menu "Strumenti"
  • "Android"
  • "Monitor dispositivo Android"
  • fai clic sul tuo attuale emulatore
  • Scheda "Controllo emulatore"
  • vai su "Controlli posizione" e inserisci Lat e Lon

2

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


una fodera molto utile! nel mio caso ho dovuto rimuovere gli spazi tra \ n: token = $ (cat ~ / .emulator_console_auth_token); cat <(echo -e "auth $ token \ ngeo fix 96.0290791 19.9041016 \ nexit") - | nc localhost 5554
Jeremie

1

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>

1

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.


cosa intendi per immagine e durante la creazione di AVD come selezionerei un'immagine con le API di Google? non ci sono tali opzioni durante la creazione di AVD in eclipse.
user1911703,

Assicurati di aver scaricato immagini con le API di Google tramite il gestore SDK di Android.
dvim,

1

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.


1

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.

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




1

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à


è possibile impostare il valore della posizione statica (Latitudine e Longitudine) quale posizione è necessario controllare direttamente nella parte di codifica?
Premkumar Manipillai,

0

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

~


All'interno di DDMS l'ho trovato sotto Controllo emulatore. Scheda sotto i controlli di posizione.
user914425
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.