simulada - ¿Cómo emular la ubicación del GPS en el emulador de Android?
ubicacion de prueba huawei p8 lite (30)
Asumiendo que tienes una vista de mapa configurada y en funcionamiento:
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 las coordenadas desde el panel de control del emulador que aparece.
Quiero obtener longitud y latitud en el emulador de Android para probar.
¿Alguien me puede guiar para lograr esto?
¿Cómo configuro la ubicación del emulador en una posición de prueba?
Consulte Obtención de la ubicación del usuario
Busque en Proporcionar datos de ubicación simulados . Encontrarás la solución para ello.
Dalvik Debug Monitor> Seleccionar emulador> pestaña Control de emulador> Controles de ubicación.
DDMS - android_sdk / tools / ddms O android_sdk / tools / monitor
En Linux donde los puertos de comunicación están bloqueados. navegue por el terminal a 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.
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éndola)
~
Escribí un script en 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. Una ubicación es empujada 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()
Estaba buscando una mejor manera de configurar las coordenadas GPS del emulador que utilizando la geo fix
y determinando manualmente las coordenadas específicas de latitud y longitud.
Incapaz de encontrar algo, armé un pequeño programa que utiliza GWT y la API de Google Maps para iniciar una herramienta de mapas basada en el navegador para configurar la ubicación del GPS en el emulador:
Esperemos que pueda ser útil para ayudar a otros que, sin duda, también se encontrarán con esta dificultad / pregunta.
Estaba tratando de establecer la solución de geo a través de adb para muchos puntos y no pude obtener mi aplicación para ver ningún dato de GPS. Pero cuando intenté abrir DDMS, seleccioné el proceso de mi aplicación y envié las coordenadas a través de la pestaña de control del emulador, funcionó de inmediato.
Hay un complemento para Android Studio llamado "Complemento de ubicación simulada". Puedes emular múltiples puntos con este plugin. Puede encontrar un manual detallado de uso en este enlace: Android Studio. Simule múltiples puntos de GPS con el complemento de ubicación simulada
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 solicita que permita que las aplicaciones de Google accedan a su ubicación, lo que supongo que funciona.
La siguiente solución funcionó para mí: abrir la línea de comandos y escribir:
adb emu geo fix [longtitude] [latitude]
Nadie mencionó aquí la solución incorporada del propio emulador, 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:
Luego, desde el panel izquierdo, seleccione Ubicación y cambie las coordenadas de acuerdo con sus necesidades. Después de presionar el botón Enviar , los cambios entrarán en vigencia inmediatamente (te recomiendo que abras Google Maps para una mejor comprensión).
Versión de Android Studio: 2.3.3
No pude obtener una corrección de GPS en el emulador cuando el emulador ejecutaba la imagen de Android sin las API de Google. Tan pronto como cambié la imagen para que contenga las API de Google, todas las formas aquí mencionadas para hacer funcionar una solución GPS.
Asegúrese de seleccionar una imagen con las API de Google al crear AVD.
No puedo comentar aún, por lo que la actualización de @ectomorphs responde aquí, que cuando telnet ahora requiere tener un token de autenticación. En linux, está en /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 se puede configurar el coorinate así.
#!/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
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
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, 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.
Para usuarios de Android Studio:
ejecuta el emulador,
Luego, vaya a Tools -> Android ->Android device monitor
abra la pestaña Emulator Control
y use el grupo de controles de ubicación.
Primero vaya a la sección DDMS en su eclipse. Abra el control del emulador .... Vaya a la sección Manual, establezca el tiempo y luego presione el botón Enviar
Puede usar un emulador como genymotion que le brinda la flexibilidad de emular su ubicación GPS actual, etc.
Puedes conectarte al Emulador a través de Telnet. Luego, tiene una consola de emulación que le permite ingresar ciertos datos como correcciones geográficas, red, etc.
Cómo utilizar la consola se explica ampliamente here . Para conectarse a la consola, abra una línea de comando y escriba
telnet localhost 5554
Luego puede usar el comando geo para establecer la latitud, la longitud y, si es necesario, la altitud en el dispositivo que se pasa a todos los programas usando el proveedor de ubicación gps. Vea el enlace de arriba para 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, como se describe en este article . No puedo encontrar una mejor fuente en este momento.
Si está utilizando Eclipse
, vaya a Window->Open Perspective->DDMS
, luego escriba uno en Location Controls
y Window->Open Perspective->DDMS
Send
.
Si está utilizando Android Studio (1.3):
- Haga clic en el menú "Herramientas"
- "Androide"
- "Monitor de dispositivo Android"
- haga clic en su emulador actual
- Pestaña "Control de emulador"
- Vaya a "Controles de ubicación" e ingrese Lat y Lon
Si está utilizando eclipse y luego el controlador del emulador, puede configurar manualmente la latitud y la longitud y ejecutar su aplicación basada en mapas en el emulador
Si las soluciones anteriores no funcionan. Prueba esto:
Dentro de su Manifest.xml de Android, 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>
Solo haz 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
funcionara.
Usando el comando "geo" en la consola del emulador
Para enviar datos de ubicación simulados desde la línea de comando:
Inicie su aplicación en el emulador de Android y abra una terminal / consola en el directorio / tools de su SDK.
Conéctate a la consola del emulador:
telnet localhost 5555
(Reemplace 5555 con cualquier puerto en el que se esté ejecutando su emulador)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
Utilizo la función DDMS plug eclipse para enviar GPS.
1. Usuarios de Android Studio.
Después de ejecutar el emulador, vaya a Herramientas-> Android-> Monitor de dispositivo Android
Haga clic en la pestaña Control de emulador cambiar desde el grupo de controles de ubicación.
2. Eclipse usuarios.
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 la longitud y la latitud en los cuadros de texto y luego haga clic en el botón Enviar. Le enviará la posición a usted emulador y la aplicación.
3. Utilizando telnet.
En el comando de ejecución escribe esto.
telnet localhost 5554
Si no está utilizando 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. Utilice la herramienta de mapas de Google basada en el navegador
Hay un programa que utiliza GWT y la API de Google Maps para iniciar una herramienta de mapas basada en el navegador para establecer la ubicación del GPS en el emulador: