¿Cómo emular la ubicación del GPS en el emulador de Android?

Quiero obtener longitud y latitud en el emulador de Android para probar.

¿Alguien puede guiarme cómo lograr esto?

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

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

Cómo usar la consola se explica extensamente aquí . Para conectarse a la consola, abra una línea de comando y escriba

telnet localhost 5554 

Luego puede usar el comando geo para configurar una latitud, una longitud y, si es necesario, una altitud en el dispositivo que se pasa a todos los progtwigs usando el proveedor de ubicación gps. Vea el enlace de arriba para obtener más instrucciones.

El comando específico para ejecutar en la consola es

 geo fix   

Encontré este sitio útil para encontrar un lat / lng realista: http://itouchmap.com/latlong.html

Si necesita más de una coordenada, puede usar un archivo kml con una ruta, como se describe un poco en este artículo . No puedo encontrar una mejor fuente en este momento.

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

Incapaz de encontrar nada, armé un pequeño progtwig que usa GWT y la API de Google Maps para lanzar una herramienta de mapa basada en navegador para establecer la ubicación del GPS en el emulador:

android-gps-emulator

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

android-gps-emulator

Si está utilizando Eclipse , vaya a Window->Open Perspective->DDMS , luego escriba uno en Location Controls y Window->Open Perspective->DDMS Send .

Para usuarios de Android Studio:

ejecuta el emulador

Luego, vaya a Tools -> Android ->Android device monitor

abra la pestaña Emulator Control del Emulator Control y use el grupo de controles de ubicación.

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

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

emulador con botón de menú

Luego, desde el panel izquierdo, selecciona Ubicación y cambia las coordenadas según tus necesidades. Después de presionar el botón Enviar , los cambios tendrán efecto inmediatamente (le recomiendo que abra Google Maps para una mejor comprensión).

enter image description here

Versión de Android Studio: 2.3.3

Suponiendo que tienes una vista de mapa configurada 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(); } }); 

Necesitará el siguiente permiso en su manifiesto:

  

Y para enviar coordenadas simuladas al emulador desde 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.

Para el nuevo emulador:

http://developer.android.com/tools/devices/emulator.html#extended

Básicamente, haga clic en el botón de tres puntos en los controles del emulador (a la derecha del emulador) y se abrirá un menú que le permitirá controlar el emulador, incluida la ubicación

1. Usuarios de Android Studio.

Después de ejecutar el emulador vaya a Herramientas-> Android-> monitor de dispositivo Android

Haga clic en el cambio de la ficha de control del emulador desde el grupo de controles de ubicación.

2. Usuarios de Eclipse.

Primero en Eclipse En el menú, seleccione “Ventana”, luego seleccione “Abrir perspectiva” y 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 tabs. Seleccione la pestaña “Emulator Control”.

En la parte inferior, verá el panel de controles de ubicación. Seleccione la pestaña “Manual”.

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

3. Usando telnet.

En el comando ejecutar, escribe esto.

 telnet localhost 5554 

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

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

 geo fix long lat geo fix -121.45356 46.51119 4392 

4. Utiliza la herramienta de mapas de Google Maps basada en navegador

Hay un progtwig que usa GWT y la API de Google Maps para iniciar una herramienta de mapa basada en el navegador para establecer la ubicación del GPS en el emulador:

android-gps-emulator

Usando el comando “geo” en la consola del emulador

Para enviar datos de ubicación simulados desde la línea de comando:

  1. Inicie su aplicación en el emulador de Android y abra una terminal / consola en el directorio / herramientas de su SDK.

  2. Conéctese a la consola del emulador:

    telnet localhost 5555 (Reemplace 5555 con cualquier puerto en el que se ejecute su emulador)

  3. Envíe los datos de ubicación: * geo fix para enviar una ubicación geográfica fija.

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

     geo fix -121.45356 46.51119 4392 

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 guión 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() 

Uso eclipse plug DDMS function para enviar GPS. enter image description here

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

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

En Mac, Linux o Cygwin:

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

Eso te 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.

Consulte Cómo obtener la ubicación del usuario

Consulte en Proporcionar datos de ubicación simulados . Encontrarás la solución para ello.

Primero ingrese a la sección DDMS en su eclipse Luego de abrir el control del emulador …. Vaya a la sección Manual, configure lat y long y luego presione el botón Enviar

La siguiente solución funcionó para mí: abrir la línea de comando y escribir:

 adb emu geo fix [longtitude] [latitude] 

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.

Dalvik Debug Monitor> Seleccionar emulador> Ficha de control del emulador> Controles de ubicación.

DDMS – android_sdk / tools / ddms O android_sdk / tools / monitor

Si está utilizando eclipse y luego usa el controlador Emulator, puede establecer manualmente la latitud y la longitud y ejecutar la aplicación basada en el mapa en el emulador.

Si está utilizando Android Studio (1.3):

  • Haga clic en Menú “Herramientas”
  • “Androide”
  • “Monitor de dispositivo Android”
  • haga clic en su emulador actual
  • Pestaña “Control del emulador”
  • ve a “Controles de ubicación” e ingresa Lat y Lon

Simplemente haga la 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 los adb devices .

Hubiera sido mejor si adb emu trabajo.

Si las soluciones anteriores no funcionan. Prueba esto:

Dentro de su android Manifest.xml, agregue los siguientes dos enlaces FUERA de la etiqueta de la aplicación, pero dentro de su etiqueta de manifiesto, por supuesto

   

No pude obtener una corrección de GPS en el emulador cuando el emulador ejecutaba una 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 las API de Google al crear AVD.

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, lo 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 comando nc (netcat) y nada más.

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

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

Hay un complemento para Android Studio llamado “Mock Location Plugin”. Puedes emular múltiples puntos con este complemento. Puede encontrar un manual detallado de uso en este enlace: Android Studio. Simular múltiples puntos GPS con el plugin Mock Location

Abra Android studio-> Herramientas menú-> Android-> Android Device Monitor-> Emulator Tab-> Location control-> Configure su latitud y longitud requeridas y verifique su proyecto según su necesidad

La respuesta de múltiples veces ya mencionada para usar el comando de shell ” geo fix … ” 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.

En eclipse:

Puede que tenga que arrastrar la ventana de 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!)

~

Todavía no puedo comentar, así que actualizando @ectomorphs responda aquí, que cuando telneting ahora requiere tener un token de autenticación. En Linux, 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 script de shell, uno puede configurar el coorinate como tal

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