Prueba de GPS en Android
¿Cómo prueba las aplicaciones GPS en Android ? ¿Podemos probarlo usando el emulador de Android ?
- ¿Por qué no hay instrumentación de prueba para BroadcastReceiver?
- Prueba de pérdidas de memoria en las aplicaciones de Android
- Prueba de suscripción en Android: elemento no encontrado
- Cómo probar la aplicación empresarial android en varios dispositivos
- Cómo generar html informe con gradle 1.12?
- Uso de la actividad de no producción para probar con Android Studio
- ClassNotFoundException durante el instrumento de prueba de Android
- Optimizar el esfuerzo de prueba de Android
- Prueba de AdMob antes de publicar
- ¿Cómo probar una ListActivity burlándose de su contentProvider y así aislar la prueba de la base de datos?
- ¿Cómo puedo comprobar en Robotium que la aplicación ha terminado?
- Prueba de un servicio de accesibilidad de Android?
- Java.lang.RuntimeException: ¡Stub! - ¿Cobertura de código de Android?
Sí.
Si desarrolla utilizando el complemento Eclipse ADT, abra la perspectiva de DDMS después de iniciar el emulador y busque la vista Control de emuladores. Hay una sección de controles de ubicación que le permite enviar coordenadas fijas de latitud y longitud, o archivos de formato GPX (formato de intercambio GPS) o KML (Keyhole Markup Language) si desea enviar múltiples coordenadas a intervalos regulares (para simular el viaje de una ruta específica) .
Alternativamente, puede simplemente telnet al emulador y utilizar el comando geo desde la línea de comandos, que admite coordenadas de latitud y longitud fija, así como frases 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 quiera utilizar 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 necesitas un permiso requerido para AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
Tal vez esta aplicación de prueba o esto puede ayudarle.
Además del código de Mallox, éste es el sulotion para la ubicación simulada además de la ubicación real del GPS: 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
Sugiero que escriba la prueba que está enviando el objeto de la localización a la clase del oyente que usted quiere probar. Con esto en mente necesitará algunos métodos auxiliares que serán capaces de producir objetos de localización.
P.ej:
Primero envíe una ubicación con coordenadas fijas (por ejemplo, centro de Nueva York).
// prueba si todo esta bien
Que envíe una coordenada que está a 100 metros de la primera coordenada. Puede hacerlo con la función que implementé recientemente: https://stackoverflow.com/a/17545955/322791
// prueba si todo esta 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 lo llame cada vez que necesite tiempo actual.
long getNow() { if (isUnitTesting) { return unitTestTime; } else { System.getcurrenttimemillis(); } }
En el entorno de prueba de unidad, simplemente establezca obj.isUnitTesting = true y obj.unitTestTime en cualquier momento que desee. Después de que usted puede enviar la primera ubicación al oyente, a continuación, cambiar el tiempo (+ x segundos) y enviar otra ubicación …
Será mucho más fácil probar su aplicación de esa manera.
En los controles extendidos de su emulador (haga clic en "…" en la barra de control junto a su emulador) hay la pestaña Ubicación, donde puede ingresar manualmente ubicaciones individuales (latitud / longitud / altitud) y enviarlas a la ubicación virtual Dispositivo o configuración de la reproducción de datos GPS a una velocidad deseada desde un GPX o un archivo KML que puede importar.
Editar: es el emulador de Android por defecto que estoy hablando.
- ¿Cuál es la mejor práctica para compartir clases entre una aplicación de Wear y Android?
- Android: Bulk Insert, cuando InsertHelper está obsoleto