Prueba de GPS en Android

¿Cómo prueba las aplicaciones GPS en Android ? ¿Podemos probarlo usando el emulador 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.

  • Prueba de instrumentación para Android - ¿Cómo recibir nueva actividad después del cambio de orientación?
  • ¿Cómo forzar un cambio de orientación en una prueba de instrumentación de Android?
  • Robolectric + rxJava + retrofit Segunda llamada lanza java.io.InterruptedIOException
  • Android Marshmallow Permisos de Pruebas
  • Prueba onActivityResult ()
  • Cómo detener y reiniciar una actividad en una prueba de instrumentación de Android?
  • ¿Hay un comando ADB para habilitar / deshabilitar datos móviles? (Dispositivo enraizado)
  • ProviderTestCase2.getProvider () es nulo
  • Java y la metodología de prueba de Android
  • Espresso prueba pegado / inactivo después de realizar (haga clic ()) en el botón en ViewAnimator
  • Soluciones actuales para probar aplicaciones de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.