2010-02-17 16 views
381

Quiero obtener longitud y latitud en el emulador de Android para probar.¿Cómo emular la ubicación del GPS en el emulador de Android?

¿Alguien me puede guiar para lograrlo?

¿Cómo configuro la ubicación del emulador en una posición de prueba?

+0

Si está utilizando Genymotion: http://stackoverflow.com/questions/30709329/give-fake-location-to-genymotion-emulator –

+0

Puede instalar uno de los muchos aplicación de ubicación simulada s en Play Store. – whoKnows

Respuesta

410

Puede conectarse al emulador a través de Telnet. Luego tiene una consola Emulator que le permite ingresar ciertos datos como geo-soluciones, red, etc.

Cómo usar la consola se explica extensamente here. Para conectarse a la consola de abrir una línea de comandos y escriba

telnet localhost 5554 

A continuación, puede utilizar el comando geo para establecer una latitud, longitud y si es necesario altitud en el dispositivo que se pasa a todos los programas utilizando el proveedor de localización GPS . Vea el enlace de arriba para obtener más instrucciones.

El comando específico para funcionar en la consola es

geo fix <longitude value> <latitude value> 

me encontré con este sitio útil para buscar un realista LAT/LNG: http://itouchmap.com/latlong.html

Si necesita más de una coordenada se puede utilizar un kml archivo con una ruta también se describe un poco en este article. No puedo encontrar una mejor fuente en este momento.

+12

usando geo fix también he establecido que la latitud y la longitud fallan obteniendo una ubicación nula. – UMAR

+0

agregando muchos valores a través de telnet ahora está funcionando ... no sé por qué ingresando dos o tres valores no funciona ... funciona hasta que cierro el emulador cuando cierro el emulador tengo que ingresar valores falsos de nuevo. – UMAR

+1

o manera simple enciende gps en el emulador y ve al control del emulador, dale latitud, valores largos y envía los valores en el emulador como una ubicación gps. – UMAR

13

Suponiendo que tienes un MapView configurado y funcionando:

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

que necesitará el siguiente permiso en su manifiesto:

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

Y para enviar coordenadas falsas para el emulador de Eclipse, vaya al menú "Ventana", seleccione "Mostrar vista"> "Otro"> "Control del emulador", y puede enviar coordenadas desde el panel de control del emulador que aparece.

+3

pero mi amigo, ¿dónde están la longitud y la latitud? – UMAR

+1

He intentado usar esta ans enviando valores falsos al control del emulador pero cuando presiono el botón enviar no hace nada, ningún mensaje aparece nada para confirmar los valores enviados o no. seocnd thing GeoPoint g = myLocation.getMyLocation(); está devolviendo valor nulo. – UMAR

+0

¿Estás seguro de que lo estás utilizando en 'runOnFirstFix'? Porque ese es el evento que se produce cuando el dispositivo recibe por primera vez la posición GPS, por lo que si alguna vez se plantea, 'getMyLocation' definitivamente debe devolver un valor. –

3

Estaba tratando de establecer la configuración geográfica a través de adb para muchos puntos y no pude obtener mi aplicación para ver los datos de GPS. Pero cuando intenté abrir DDMS, seleccionar el proceso de mi aplicación y enviar coordenadas a través de la pestaña de control del emulador, funcionó de inmediato.

+0

No necesita especificar un proceso ... O quizás DDMS en 2010 requiera hacer eso. –

100

Estaba buscando una mejor manera de establecer las coordenadas del GPS del emulador que usando geo fix y determinando manualmente las coordenadas de latitud y longitud específicas.

No se pudo encontrar nada, armar un pequeño programa que utiliza GWT y la API de Google Maps para lanzar una herramienta de mapa basado en navegador para establecer la ubicación GPS en el emulador:

android-gps-emulator

suerte puede ser útil para ayudar a otros que sin duda tropezarán con esta dificultad/pregunta también.

android-gps-emulator

+1

¡Excelente herramienta! Muchas gracias! –

+0

¡Realmente genial, gracias muchísimo! :) –

+0

¡guau, gracias! la configuración funcionó bien, pero no pude gestionar una conexión con el emulador -> el registro imprime java.net.ConnectionRefused. entonces probé telnet localhost 5554 (desde la terminal) y funcionó ... ¿alguien más ha probado tu emulador con éxito en mac? – ottel142

10

Usando el comando "geo" en la consola emulador

Para enviar los datos de ubicación simuladas desde la línea de comandos:

  1. iniciar su aplicación en el emulador de Android y abrir una terminal/consola en el directorio de SDK/tools.

  2. conectarse a la consola emulador:

    telnet localhost 5555 (Reemplazar 5555 con cualquier puerto de su emulador se ejecuta en)

  3. enviar los datos de localización: * fix geo a enviar un geo-ubicación fija.

    Este comando acepta una longitud y una latitud en grados decimales, y una altitud opcional en metros. Por ejemplo:

    geo fix -121.45356 46.51119 4392 
    
80

Si está utilizando Eclipse, vaya a Window->Open Perspective->DDMS, a continuación, escriba una en Location Controls y pulsa Send.

+8

Este es, de lejos, el método más fácil que he visto. Asegúrese de configurar su AVD con soporte GPS, luego en el DDMS Haga clic en el emulador que se ejecuta en Dispositivos, elija la pestaña Control del emulador en el panel central derecho y en la parte inferior esté la sección Controles de ubicación mencionada por SteveCav (Usando Eclipse Juno 4.2 para desarrolladores Java con el ADT más reciente). Controles de mi ubicación el panel incluso estaba precargado con datos de ubicación. –

+0

¡excelente respuesta! funciona con cualquier ide porque ddms es parte del sdk (yoursdkfolder/tools /) – Zarokka

+1

Esto, ni el telnet por lo lution anterior, estaba trabajando para mí.Estoy tratando de obtener mi ubicación así, pero sigue siendo nula. 'LocationManager mlocManager = (LocationManager) getSystemService (Context.LOCATION_SERVICE);' 'Ubicación location = mlocManager.getLastKnownLocation (LocationManager.NETWORK_PROVIDER);' – crowmagnumb

1

Si las soluciones anteriores no funcionan. Prueba esto:

Dentro de su Manifest.xml androide, añadir las siguientes dos enlaces FUERA de la etiqueta de la aplicación, pero dentro de la etiqueta manifiesta por supuesto

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

yo era incapaz de conseguir una posición GPS en el emulador cuando el emulador ejecutaba la imagen de Android sin las API de Google. Tan pronto como cambié la imagen para contener las API de Google, funcionaron todas las formas aquí mencionadas de obtener una corrección de GPS.

Asegúrese de seleccionar una imagen con Google API al crear AVD.

+0

¿Qué quiere decir con Image y al crear AVD, cómo seleccionaría una imagen con las API de Google? no existen tales opciones mientras se crea AVD en eclipse. – user1911703

+0

Asegúrese de haber descargado imágenes con las API de Google a través del administrador de Android SDK. – dvim

12

1. Usuarios de Android Studio.

Después de ejecutar el emulador Goto Herramientas-> Android-> monitor de dispositivos Android

Haga clic en el cambio emulador Ficha Control del grupo que controla la ubicación.

2. Usuarios de Eclipse.

Primero en Eclipse En el menú, seleccione "Ventana", luego seleccione "Abrir perspectiva", luego seleccione "DDMS". es decir Ventana-> Abrir Presente-> DDMS.

Verá en el panel de dispositivos del lado izquierdo y en el lado derecho verá diferentes pestañas. Seleccione la pestaña "Emulator Control".

En la parte inferior verá el Panel de controles de ubicación. Seleccione la pestaña "Manual".

Ingrese la longitud y la latitud en los cuadros de texto y luego haga clic en el botón Enviar. Te enviará la posición a tu emulador y a la aplicación.

3. Usando telnet.

En el comando ejecutar, escriba esto.

telnet localhost 5554 

Si no está utilizando Windows puede utilizar cualquier cliente de Telnet.

Después de conectar con telnet, utilice el siguiente comando para enviar su posición al emulador.

geo fix long lat  
geo fix -121.45356 46.51119 4392 

4. Uso de la herramienta basada en los mapas de Google

navegador Hay un programa que utiliza GWT y la API de Google Maps para lanzar una herramienta de mapa basado en navegador para establecer la ubicación GPS en el emulador :

android-gps-emulator

+0

Esta primera opción funcionó para mí, con un pequeño cambio. No pude abrir la ventana DDMS de Eclipse, acabo de recibir una página gris en blanco. Pero mientras ejecutaba el emulador, si abría DDMS desde el símbolo del sistema (C: \ Archivos de programa \ Android \ android-sdk \ tools \ ddms), entonces podía ver la ventana que describió con Dispositivos a la izquierda y "Emulator Control" "pestaña a la derecha". ¡Gracias! –

3

Dalvik Debug monitor> Seleccionar emulador> emulador Ficha control> Ubicación de controles.

DDMS - android_sdk/herramientas/O DDMS android_sdk/herramientas/monitor

4

Primero ve en la sección DDMS en su Eclipse que el control de emulación abierta .... Ve a la sección Manual establecer lat y largo, luego presione el botón Enviar

5

Utilizo la función DDMS del eclipse para enviar GPS. enter image description here

0

El ya se ha mencionado varias veces responden a utilizar el comando shell "solución geo ..." es la respuesta correcta. Pero en caso de que use LocationClient.getLastLocation() para recuperar sus datos, vale la pena mencionar que no funcionará al principio. La clase LocationClient usa el servicio Google Play para recuperar las coordenadas. Para mí, esto comenzó a funcionar después de ejecutar la aplicación de mapas de emuladores una vez. Durante el primer inicio, se le pedirá que permita que las aplicaciones de Google accedan a su ubicación, lo que supongo que es el truco.

5

En Linux, donde los puertos de comunicación están bloqueados. navegar por el terminal a la carpeta de plataforma de herramientas dentro android sdk y el fuego de este comando:

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

Si está utilizando Eclipse y luego usa el regulador del emulador puede configurar manualmente la latitud y longitud y ejecutar aplicación basada en su mapa en emulador

0

En eclipse:

Puede que tenga que arrastrar la ventana DDMS hacia abajo. 'Controles de ubicación' se encuentra en 'Acciones de telefonía' y puede estar oculto por una vista de consola de tamaño normal (¡la barra con consola, LogCat, etc. puede estar cubriéndolo!)

~

+0

dentro de DDMS que encontré en Emulator Control. Pestaña debajo de los controles de ubicación. – user914425

29

Para los usuarios de Android Studio:

ejecutar el emulador,

A continuación, vaya a Tools -> Android ->Android device monitor

abrir la pestaña Emulator Control, y utilizar el grupo de controles de ubicación.

+0

En mi caso, todos los archivos de archivo no son editables. Tienes una idea ? –

+3

@MustafaOlkun Probablemente significa que el emulador tiene esos controles en él. Busque un "..." al lado del emulador. – Justin

+1

Tengo el mismo problema. No son editables y sí, está el "...". Sin embargo, cuando coloco algo allí y Enviar, nada cambia en la aplicación .... – KansaiRobot

1

Para un proyecto propio, desarrollé un servicio en línea que puede proporcionar una ubicación simulada para el emulador de Android.

Utiliza geo nmea en lugar de geo fix que le permite establecer la velocidad, el rumbo, el tiempo preciso, etc., además de solo lat/lon.

El servicio requiere la utilidad de línea de comandos nc (netcat) y nada más.

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

5

En Mac, Linux o Cygwin:

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

que le pondrá en la Ciudad de México. Cambie su longitud/latitud/altitud en consecuencia. Eso debería ser suficiente si no estás interesado en nmea.

+0

Es posible que deba ajustar el 5554 al puerto de escucha de su emulador actual. –

8

Escribí un script de python para enviar las ubicaciones gps al emulador a través de telnet. Define una fuente y una ubicación de destino. También hay una compensación de tiempo que le permite controlar cuánto tiempo se presionarán las coordenadas en el dispositivo. Una ubicación está siendo presionada una vez por segundo.

En el siguiente ejemplo, el script se mueve de Berlín a Hamburgo en 120 segundos. Ubicación de un paso/gps por segundo con distancias aleatorias.

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

¡Funciona como un encanto! Gracias por compartir. –

+0

@AlbertoGaona ¡Me alegro de que funcionó para ti! – user937284

+0

Mmmmm. Creo que hay un pequeño error: por lo que sé, el mensaje de configuración geográfica obtiene Longitude y Latitude, en ese orden: los estás enviando al revés. Ver respuestas arriba. –

2

Si utilizas Android Studio (1.3):

  • Haga clic en el menú "Herramientas"
  • "Android"
  • "monitor de dispositivos Android"
  • clic en su emulador actual
  • Pestaña "Emulator Control"
  • vaya a "Controles de ubicación" y introducir Lat y Lon
1

puede utilizar un emulador como genymotion que le da la flexibilidad para emular a su ubicación GPS actual, etc.

+0

Sí, Genymotion funciona bien. Aunque todavía no puedo instalar Android Maps ... – KansaiRobot

+0

@KansaiRobot Bueno, tuve que instalar Google Play (http://stackoverflow.com/questions/17831990/how-do-you-install-google-frameworks-play -accounts-etc-on-a-genymotion-virt) en el emulador –

0

No se puede comentar aún, por lo que actualizando @ectomorphs responda aquí, que cuando telneting ahora requiere tener un token de autenticación. En Linux que está bajo /home/username/.emulator_console_auth_token

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import sys 
import telnetlib 
from time import sleep 
import random 

FILE = open('/home/username/.emulator_console_auth_token', 'r') 
AUTH_TOKEN = FILE.read() 
FILE.close() 

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("auth {0}\n".format(AUTH_TOKEN)) 
tn.read_until("OK", 5) 

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

Desde un shell script se puede establecer el coorinate al igual que

#!/usr/bin/env bash 
export ATOKEN=`cat ~/.emulator_console_auth_token` 
echo -ne "auth $ATOKEN\ngeo fix -99.133333 19.43333 2202\n" | nc localhost 5554 
3

La siguiente solución que funcionó para mí - línea de comandos abierta y escribir:

adb emu geo fix [longtitude] [latitude] 
2

Sólo asegúrese de respuesta de Alberto Gaona en una línea

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

5554 es el número de puerto del emulador que se muestra en adb devices.

Hubiera sido mejor si adb emu funcionara.

+0

muy útil un trazador de líneas! en mi caso tuve que eliminar los espacios entre \ n: token = $ (cat ~/.emulator_console_auth_token); cat <(echo -e "auth $ token \ ngeo corregir 96.0290791 19.9041016 \ nexit") - | nc localhost 5554 – Jeremie

15

Nadie mencionó aquí la solución incorporada del emulador en sí, así que para futuros visitantes, me gustaría compartirlo con imágenes.

primer lugar, ejecute el emulador de Android y haga clic en el botón de menú (3 puntos) que se muestran a continuación:

emulator with menu button

A continuación, en el panel izquierdo, seleccione Ubicación y cambiar las coordenadas de acuerdo a sus necesidades . Después de presionar Enviar botón, los cambios tendrán efecto inmediatamente (le recomiendo que abra Google Maps para una mejor comprensión).

enter image description here

Android Studio Versión: 2.3.3

0

he hecho un pequeño script similar a una de las respuestas anteriores, pero utilizando en lugar de expectpython - porque es un poco más simple (expect fue inventado para esto).

#!/usr/bin/expect 

set port [lindex $argv 0] 
set lon [lindex $argv 1] 
set lat [lindex $argv 2] 

set timeout 1 
spawn telnet localhost $port 
expect_after eof { exit 0 } 

## interact 
expect OK 

set fp [open "~/.emulator_console_auth_token" r] 
if {[gets $fp line] != -1} { 
    send "auth $line\r" 
} 

send "geo fix $lon $lat\r" 
expect OK 
send "exit\r" 

uso Ejemplo: sendloc 5554 2.35607 48.8263

1

abierto Android estudio-> Herramientas menu-> Android-> Dispositivo Android Monitor-> Pestaña emulador> Localización control-> Establecer su latitud requerida y longitud y comprobar su proyecto según su necesidad

+0

puede establecer el valor de ubicación estática (Latitud y longitud) ¿qué ubicación necesita verificar directamente en la parte de codificación? –

Cuestiones relacionadas