¿Cómo se prueba las aplicaciones GPS en Android? ¿Podemos probarlo usando el Android emulator?Testing GPS en Android
Respuesta
Sí.
Si desarrolla utilizando el plug-in de Eclipse ADT, abra la perspectiva DDMS después de lanzar el emulador y buscar el punto de vista de control del emulador. Hay una sección de controles de ubicación que le permite enviar latitud y longitud coordenadas fijas o archivos GPX (GPS Exchange Format) o KML (Keyhole Markup Language) si desea enviar varias coordenadas a intervalos regulares (para simular recorrer una ruta específica) .
Alternativamente, puede simplemente telnet al emulador y utilizar el comando geo desde la línea de comandos, lo que apoya la latitud fija y las coordenadas de longitud, así como sentencias de datos NMEA:
telnet localhost 5554
geo fix -82.411629 28.054553
geo nmea $GPGGA,001431.092,0118.2653,N,10351.1359,E,0,00,,-19.6,M,4.1,M,,0000*5B
Tal vez usted quiere a un uso una prueba de unidad, por lo que puede probar esto:
public class GPSPollingServiceTest extends AndroidTestCase {
private LocationManager locationManager;
public void testGPS() {
LocationManager locationManager = (LocationManager) this.getContext().getSystemService(Context.LOCATION_SERVICE);
locationManager.addTestProvider("Test", false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
locationManager.setTestProviderEnabled("Test", true);
// Set up your test
Location location = new Location("Test");
location.setLatitude(10.0);
location.setLongitude(20.0);
locationManager.setTestProviderLocation("Test", location);
// Check if your listener reacted the right way
locationManager.removeTestProvider("Test");
}
}
para que esto funcione también necesita un permiso necesario para la AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
Hola, ¿pueden explicarme un poco más? detalla cómo funciona este código. ¿Cómo se probará la actividad que responde a los eventos de ubicación con esto? – Petar
Hola, ha pasado un tiempo, pero veamos si puedo reunir todo de nuevo: Con el LocationManager obtienes el administrador de ubicación GPS del sistema que notifica a tu aplicación los cambios de posición. En la segunda línea, agrega un nuevo proveedor de ubicación. Como va a realizar una prueba unitaria, no tendrá registrado ningún otro proveedor de ubicación. Cuando marqué el comentario "// Configure su prueba", puede inicializar los componentes que desea probar, que deberían estar escuchando los cambios en las posiciones desde el LocationManager. – Mallox
Después de eso, envía una nueva ubicación al administrador de la ubicación y su código que desea probar debe hacer algo con esa información, para que pueda verificar luego si hizo lo correcto. Finalmente, desea eliminar el proveedor de prueba, de modo que no haya varios proveedores de localización para realizar pruebas, si escribe otras pruebas. (aunque junit probablemente lo limpiará correctamente) – Mallox
que sugieren que escriba prueba de que está enviando ubicación objeto a la clase oyente que desea probar. Con esto en mente, necesitarás algunos métodos de ayuda que podrán producir objetos de ubicación.
ej .:
Primero le envíe una ubicación con coordenadas fijas (por ejemplo, centro de Nueva York).
// prueba si todo está bien
De lo que envía una coordenada que es appart 100 metros de la primera coordenada. Puede hacer esto con la función I implementado recientemente: https://stackoverflow.com/a/17545955/322791
// prueba si todo está bien
Es común que los métodos GPS están relacionados con el tiempo. Sugiero que implemente el método getNow() en la clase de escucha y que lo llame siempre que necesite la hora actual.
long getNow() {
if (isUnitTesting) {
return unitTestTime;
} else {
System.getcurrenttimemillis();
}
}
En el entorno de prueba de unidad se establece simplemente el obj.isUnitTesting = true y obj.unitTestTime a cualquier momento que desee. Después de que se puede enviar primera ubicación para el oyente, a continuación, cambia el tiempo (+ x segundos) y enviar otro lugar ...
Será mucho más fácil para probar la aplicación de esa manera.
además del código Mallox este es el sulotion de ubicación simuladas, además de la ubicación GPS real: TEST_MOCK_GPS_LOCATION es una cadena
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = null;
List providers = lm.getAllProviders();
for (Object provider : providers) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location loc = lm.getLastKnownLocation((String) provider);
if (provider.equals(TEST_MOCK_GPS_LOCATION)) {
mLastLocation = loc;
}
}
en la clase de prueba es:
public class GPSPollingServiceTest extends AndroidTestCase {
private LocationManager locationManager;
public void testGPS() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
LocationManager locationManager = (LocationManager) this.getContext().getSystemService(Context.LOCATION_SERVICE);
List providers = locationManager.getAllProviders();
if(!providers.contains(TEST_MOCK_GPS_LOCATION)) {
locationManager.addTestProvider(TEST_MOCK_GPS_LOCATION, false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
locationManager.setTestProviderEnabled(TEST_MOCK_GPS_LOCATION, true);
// Set up your test
Location location = new Location(TEST_MOCK_GPS_LOCATION);
location.setLatitude(34.1233400);
location.setLongitude(15.6777880);
location.setAccuracy(7);
location.setTime(8);
location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
locationManager.setTestProviderLocation(TEST_MOCK_GPS_LOCATION, location);
Method locationJellyBeanFixMethod = Location.class.getMethod("makeComplete");
if (locationJellyBeanFixMethod != null) {
locationJellyBeanFixMethod.invoke(location);
}
} else {
// Check if your listener reacted the right way
locationManager.removeTestProvider(TEST_MOCK_GPS_LOCATION);
}
}
}
espero que te ayude
En los controles Extendidos de su emulador (haga clic en "..." en la barra de control al lado de su emulador), encontrará la pestaña Ubicación, donde puede ingresar manualmente ubicaciones individuales (latitud/longitud/altitud) y enviarlas al dispositivo virtual, o configure la reproducción de datos GPS a la velocidad deseada desde un archivo GPX o KML que pueda importar.
Edición: es el emulador de Android predeterminado al que me refiero.
- 1. orientación GPS en Android
- 2. Android Service Testing
- 3. Dispositivo Android (GPS) Dirección
- 4. android gps ubicación actual
- 5. android cómo detener gps
- 6. Live Testing de Android LVL
- 7. BDD Android UI testing framework?
- 8. Android Unit Testing: Paquete/Parcelable
- 9. Android Testing - Problema con ActivityInstrumentationTestCase2?
- 10. Obtener coordenadas de GPS: Android
- 11. Android GPS tiempo de espera
- 12. Phonegap Android y satélite GPS
- 13. android gps posición precisión círculo
- 14. ICS Android habilita gps programáticamente
- 15. Fijación de GPS más rápida en Android
- 16. Cómo activar el GPS en Android
- 17. Mocking up WifiManager for Android Unit Testing
- 18. UI testing vs unit testing
- 19. Android activar y desactivar el GPS
- 20. Android GPS estado activado o desactivado
- 21. GPS para Android Localización velocidad no fiable
- 22. mejorar la precisión del GPS Android
- 23. ¿Qué tan preciso es Android GPS?
- 24. Android GPS ACCURACY_HIGH provoca la fuerza cerca?
- 25. Simulación GPS en iOS
- 26. Filtro de Kalman para GPS android
- 27. Ejecutar escucha de GPS en segundo plano en Android
- 28. Hit Testing en WPF
- 29. Android comprobar la disponibilidad de GPS en el dispositivo
- 30. ¿Comprobar WiFi y GPS está conectado o no en Android?
¿Qué tal las pruebas en un dispositivo real? ¿Cómo se puede establecer su GEO sobre adb? – fijiaaron
Muchas gracias. Hice muchas investigaciones, ¡y ahora tengo la respuesta! – eav
Hola. Tuve el mismo problema, quería probar en un dispositivo real usando el comando "geo fix", resulta que no es posible de inmediato, así que escribí una aplicación que proporciona esa funcionalidad :) [MockGeoFix] (https: // play .google.com/store/apps/details? id = github.luv.mockgeofix & hl = es) y [código fuente] (https://github.com/luv/mockgeofix/) – luv