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


444

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

¿Alguien puede guiarme para lograr esto?

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



Puede instalar una de las muchas aplicaciones de ubicación simulada en Play Store.
WhoKnows

Respuestas:


443

Puede conectarse al emulador a través de Telnet. Luego tiene una consola Emulator que le permite ingresar ciertos datos como arreglos geográficos, red, etc.

Aquí se explica ampliamente cómo usar la consola . Para conectarse a la consola, abra una línea de comando y escriba

telnet localhost 5554

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

El comando específico para ejecutar en la consola es

geo fix <longitude value> <latitude value>

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, también se describe un poco en este artículo . No puedo encontrar una mejor fuente en este momento.


13
usando geo fix también he establecido simulacros de latitud y longitud obteniendo una ubicación nula.
UMAR

2
o de manera simple, active el gps en el emulador y vaya al control del emulador, proporcione valores falsos de lat y long y le enviará esos valores en el emulador como una ubicación gps.
UMAR

35
adb emu geo fix 30.219470 -97.745361
Bryan Rehbein

12
¡Cuidado con el orden, mucho antes de lat!
Christoph

14
El geo fixcomando solo está disponible si usted authprimero. Vale la pena mencionar ...
aroth

126

Nadie aquí mencionó la solución integrada del emulador en sí, por lo 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, seleccione Ubicación y cambie las coordenadas según sus necesidades. Después de presionar el botón Enviar , los cambios surtirán efecto de inmediato (le recomiendo que abra Google Maps para una mejor comprensión).

ingrese la descripción de la imagen aquí

Versión de Android Studio: 2.3.3

Además, para que sus diferentes ubicaciones lleguen a su aplicación en tiempo real, puede usar el archivo GPX. Es muy fácil crear este archivo desde el enlace de dirección de Google Map:

  1. Vaya a google map, elija una ubicación, luego presione "Indicaciones" e ingrese la segunda ubicación.
  2. Después de crear la ruta, copie un enlace del navegador
  3. Vaya a este sitio web: https://mapstogpx.com y pegue el enlace en el cuadro "Let's Go"
  4. Presione el botón "Let's Go" y se descargará el archivo GPX

Use el botón "Cargar GPS / KML" para cargar el archivo creado en su emulador, elija la velocidad y presione el botón verde de reproducción en la parte inferior. Las ubicaciones se enviarán en tiempo real como se muestra en la imagen a continuación.

ingrese la descripción de la imagen aquí


¿En esta solución necesitas un juego de servicios en emulador?
Kevan Aghera el

No lo creo.
eden

cuando abro la aplicación en el emulador de cliente de API de Google, así que no puedo cargar el mapa en el emulador. Y el dispositivo móvil está bien para mí.
Kevan Aghera

44
Confirmo que no es necesario iniciar sesión en su cuenta de Google para hacer esto. ¡Frio!
xarlymg89

3
Tuve que reiniciar el sistema operativo emulado para que reconociera la nueva ubicación.
Nate Whittaker

109

Estaba buscando una mejor manera de establecer las coordenadas GPS del emulador que usar geo fixy determinar manualmente las coordenadas específicas de latitud y longitud.

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

android-gps-emulator

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


¡Wow gracias! La configuración funcionó bien, pero no pude administrar una conexión al emulador -> log imprime java.net.ConnectionRefused. luego probé telnet localhost 5554 (desde la terminal) y funcionó ... ¿Alguien más ha probado su emulador con éxito en Mac?
ottel142

1
No lo probé, pero esto se ve tan increíble que creo que Google debería decirle al mundo al respecto. Las ideas simples son siempre las mejores. ¿Por qué nadie pensó en esto?
tiktak

@ ottel142 - Sí, en realidad estoy ejecutando en una Mac sin ese problema (usando Chrome en Mavericks). Entonces veo ese ConnectionRefusedmensaje si ejecuto el emulador GPS antes de iniciar el dispositivo virtual Android. En la parte superior de mi navegador también dice "Error al hacer la conexión en el puerto 5554 ..." Todo funciona bien si hago clic en el botón "Cambiar el puerto del emulador" para volver a conectar
dpdearing

Exactamente lo que necesitaba.
David

Este es un buen programa, pero la localidad del sistema cambia la forma en que funcionan los flotadores. En mi sistema tiene que ser como geo fix 42,42 42,42 42comas en lugar de puntos.
nurettin

81

Si está usando Eclipse, vaya a Window->Open Perspective->DDMS, luego escriba uno Location Controlsy presione Send.


8
Este es, con mucho, el método más fácil que he visto. Asegúrese de configurar su AVD con soporte para GPS, luego, en la perspectiva DDMS, haga clic en el emulador que se ejecuta en Dispositivos, elija la pestaña Control de emulador en el panel central derecho y luego en la parte inferior se encuentra la sección Controles de ubicación que SteveCav mencionó (Uso Eclipse Juno 4.2 para desarrolladores Java con el último ADT). Mi panel de controles de ubicación incluso se cargó previamente con datos de ubicación.
Steven Magana-Zook

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

1
Esto, ni la solución de telnet anterior, funcionaba para mí. Estoy tratando de obtener mi ubicación de esta manera, pero todavía es nula. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
crowmagnumb

Cuando uso "Controles de ubicación" en DDMS aparece el siguiente error al intentar enviar Unable to send command to the emulator. ¿Alguna idea de por qué no funciona? Estoy usando el AVD Nexus 4 predeterminado
emersonthis

1
No puedo hacer esto, los controles de ubicación están en gris
Utsav Gupta

33

Para usuarios de Android Studio:

ejecuta el emulador,

Luego ve a Tools -> Android ->Android device monitor

abra la Emulator Controlpestaña y use el grupo de controles de ubicación.


En mi caso, todos los archivos no son editables. Tienes una idea ?
Olkunmustafa

44
@MustafaOlkun Probablemente significa que el emulador en sí tiene esos controles. Busque un "..." al lado del emulador.
Justin

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

14

Suponiendo que tiene una vista de mapa configurada y en ejecución:

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:

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

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.


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

1
He intentado usar esto y enviar valores simulados al control del emulador, pero cuando presiono el botón enviar no hace nada, no aparece ningún mensaje, nada parece confirmar los valores enviados o no. seocnd cosa GeoPoint g = myLocation.getMyLocation (); está devolviendo un valor nulo.
UMAR

¿Estás seguro de que lo estás usando dentro runOnFirstFix? Debido a que ese es el evento que se genera cuando el dispositivo recibe por primera vez la posición GPS, por lo que si alguna vez se eleva, getMyLocationdefinitivamente debería devolver un valor.
David Hedlund


13

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 pestaña 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 Prespectiva-> DDMS.

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

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

Ingrese Longitud y Latitud en los cuadros de texto y luego haga clic en el botón Enviar. Le enviará la posición a su emulador y a la aplicación.

3. Usando telnet.

En el comando de ejecución, escriba esto.

telnet localhost 5554

Si no está usando Windows, puede usar cualquier cliente 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. Use la herramienta de mapas de Google basada en navegador

Hay un programa 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


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

10

Usando el comando "geo" en la consola del emulador

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

  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 esté ejecutando 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

8

Escribí un script de Python para enviar ubicaciones GPS al emulador a través de Telnet. Define una fuente y una ubicación de destino. También hay un desplazamiento de tiempo que le permite controlar cuánto tiempo se empujarán las coordenadas al dispositivo. Se está presionando una ubicación 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()

¡Funciona de maravilla! Gracias por compartir.
Alberto Gaona

Mmmmm Creo que hay un pequeño error: hasta donde yo sé, el mensaje de corrección geográfica obtiene Longitud y Latitud, en ese orden: los está enviando al revés. Ver respuestas arriba.
Alberto Gaona

No funciona. El emulador está escuchando en el puerto pero no recibe nada.
Durga Swaroop


5

En Linux donde los puertos de comunicación están bloqueados. navegue la terminal a la carpeta de herramientas de plataforma dentro android sdky active este comando:

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

5

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.


Puede que tenga que ajustar el 5554 a su puerto de escucha de emulador actual.
Alberto Gaona

5

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

adb emu geo fix [longtitude] [latitude]

5

Finalmente, con la última versión de Android Studio 4 y su nueva actualización de Emulator 23/10/2019, se hizo más fácil. Inicie su emulador y vaya a los parámetros del emulador ...> en la pestaña "Rutas", puede elegir dos puntos en el mapa de / a e iniciar una nueva ruta con una velocidad de reproducción ajustable que puede llegar a más de 1000 km / h.

ingrese la descripción de la imagen aquí


Entonces, ¿cómo obtener lat lat actual?
Mahmoud Ayman hace


4

Primero vaya a la sección DDMS en su eclipse. Luego abra el control del emulador .... Vaya a la sección Manual, ajuste lat y long y luego presione el botón Enviar


3

Intenté configurar la corrección geográfica a través de adb para muchos puntos y no pude hacer que mi aplicación vea ningún dato de GPS. Pero cuando intenté abrir DDMS, seleccioné el proceso de mi aplicación y envié coordenadas a través de la pestaña de control del emulador, funcionó de inmediato.


No necesita especificar un proceso ... O quizás DDMS en 2010 requiera hacerlo.

3

Dalvik Debug Monitor> Seleccionar emulador> pestaña Control de emulador> controles de ubicación.

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


2

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


2

Si está utilizando Android Studio (1.3):

  • Haga clic en el menú "Herramientas"
  • "Androide"
  • "Monitor de dispositivo Android"
  • haz clic en tu emulador actual
  • Pestaña "Control del emulador"
  • ve a "Controles de ubicación" e ingresa Lat y Lon

2

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 adb devices .

Hubiera sido mejor si el adb emutrabajo.


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 fix 96.0290791 19.9041016 \ nexit") - | nc localhost 5554
Jeremie

1

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 por supuesto dentro de su etiqueta de manifiesto

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

1

No pude obtener una solució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, todas las formas mencionadas aquí para hacer que funcione una solución de GPS.

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


¿Qué quieres decir con imagen 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

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

1

La respuesta varias 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 al principio no funcionará. 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 pide que permita que las aplicaciones de Google accedan a su ubicación, lo que supongo que funciona.


1

Para un proyecto propio, desarrollé un servicio en línea que puede proporcionar una ubicación simulada al 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/




1

Abra Android studio-> menú Herramientas-> Android-> Android Device Monitor-> Emulator Tab-> Location control-> Establezca la latitud y longitud requeridas y verifique su proyecto según sus necesidades


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

0

En eclipse:

Puede que tenga que arrastrar la ventana DDMS hacia abajo. 'Controles de ubicación' se encuentra debajo de '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éndola!)

~


Dentro de DDMS que encontré bajo Control de emulador. Pestaña debajo de los controles de ubicación.
user914425
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.