SDKs:GPSTracking:index

De mobeleader
Revisión del 16:06 12 sep 2017 de Gerardo (discusión | contribs.) (Página creada con «prueba»)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda
  1. CÓMO AGREGAR LA LIBRERÍA GPS-TRACKING EN ANDROID


INTRODUCCIÓN.

La librería GPSTracking envía datos de la posición del dispositivo de manera periódica y constante, así como información del propio dispositivo en la que se ejecuta.

VERSIONES DE ANDROID SOPORTADAS.

Esta librería soporta todas las versiones de Android superiores a la 4.0 o Ice Cream Sandwich.

FUNCIONAMIENTO DE LA LIBRERÍA.

La librería GPSTracking obtiene las posiciones GPS del dispositivo y las envía periódicamente cada 3 horas, tanto si la aplicación está abierta como cerrada.

CONFIGURACION DE LOS ENVIOS.

El comportamiento de la librería es el siguiente:

  • Los envíos comienzan una vez se abre la aplicación y continúan aún cerrando ésta.
  • La frecuencia de envío es de 3 horas.
  • NO existe un límite de envíos.
  • NO se registra el usuario.


Si desea personalizar la configuración de la librería para que el comportamiento de ésta sea diferente contacte con su administrador.

INSTALACION DE LA LIBRERIA.

Disponemos de un repositorio maven para que sus librerías puedan ser utilizadas en Android Studio. Para poder usar la librería GPSTracking es necesario realizar varios cambios, tanto en el archivo build.gradle como en el AndroidManifest.xml de su aplicación.

Cambios en el archivo build.gradle.

En el apartado repositories deberá añadir:

   repositories {
       mavenCentral()
       maven { url 'http://maven.mobeleader.com' }
   }

La librería GPSTracking utiliza la librería auxiliar UtilsLib. Por tanto, para utilizar la librería GPSTracking en su aplicación, en el apartado dependencies deberá añadir:

   //noinspection GradleDynamicVersion
   implementation 'com.mobeleader.utils:UtilsLib:+'
   //noinspection GradleDynamicVersion
   api 'com.mobeleader.gpstracking:GPSTrackingLib:+'

Si desea registrar los usuarios de la aplicación cuando se realice un envío (no olvide contactar con su administrador para activar esta opción), añada la siguiente dependencia:

   //noinspection GradleDynamicVersion
   api 'com.mobeleader.register:RegisterLib:+'

Cambios en el archivo AndroidManifest.xml.

Es necesario añadir los siguientes permisos:

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

Añada los siguientes permisos opcionales para que el funcionamiento de la librería sea completo:

   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Añada el servicio com.mobeleader.gpstracking.GPSTrackingService a la etiqueta application:

   <service android:name="com.mobeleader.gpstracking.GPSTrackingService" />

Añada el receiver com.mobeleader.gpstracking.GPSTrackingReceiver a la etiqueta application:

   <receiver android:name="com.mobeleader.gpstracking.GPSTrackingReceiver" >
   	<intent-filter>
       	<action android:name="android.intent.action.BOOT_COMPLETED" />
   	</intent-filter>
   </receiver>

Cambios en el Proguard.

En caso de que esté utilizando el Proguard (variable minifyEnabled a TRUE en el build.gradle), será necesario añadir en el fichero del Proguard utilizado (proguard-rules.pro por defecto) la siguiente regla:

   -keep class com.mobeleader. {*;}

LANZAMIENTO DE LA LIBRERIA.

Instancia de la clase GPSTracking.

La librería puede ser lanzada en cualquier momento y lugar. Para ello, lo primero que debe hacer es instanciar la clase GPSTracking.

Existen 2 maneras de instanciar la clase GPSTracking:

  • Añadiendo únicamente el contexto del Activity. En este caso el comportamiento de la librería será el estándar o por defecto y no tendrá opción de modificarlo:


   GPSTracking gpsTracking = new GPSTracking(this);
  • Añadiendo el contexto del Activity y el código hash de la aplicación. En este caso el comportamiento de la librería puede ser el estándar o personalizado. El comportamiento puede ser modificado en cualquier momento:



   GPSTracking gpsTracking = new GPSTracking(this,"appHash");

Puede obtener el código hash entrando en la sección Mis Aplicaciones y pulsando el icono de la columna "Hash" de su aplicación. app_hash.png

Notificación del servicio.

A partir de la versión 8.0 u Oreo, Android exige la notificación de los servicios que puedan ser ejecutados en background. En caso de NO notificarse la ejecución de estos servicios la aplicación podría ser rechazada, por lo que es conveniente hacerlo.

Existen dos maneras de crear la notificación a partir del servicio de localización

  • Creando un nuevo canal de notificación.
  • A partir de un canal previamente creado en su proyecto.


Independientemente de la manera en que cree la notificación, es necesario añadir el icono para las notificaciones de Android, de lo contrario mostrará un icono vacío, lo cual podría ocasionar el rechazo de la aplicación por parte de Android. Si no tiene creado el recurso Drawable añadaló.

Para obtener más información al respecto consulte el apartado 'Notificaciones' en la web de Android.

Creando un nuevo canal de notificación.

Si no tiene creado un canal de notificaciones, la propia librería GPSTracking se encargará de hacerlo. Para ello añada el siguiente código una vez instanciada la clase:

   gpsTracking.setNotification(icon_id);

En el campo icon_id ha de añadir el identificador del recurso. Ejemplo: R.drawable.ic_notification_icon.

A partir de un canal previamente creado en su proyecto.

Si ya tiene creado un canal de notificaciones y desea utilizarlo para el servicio de GPSTracking, añada el siguiente código una vez instanciada la clase:

   gpsTracking.setNotification(icon_id, channel_id, notification_id);
  • En el campo icon_id ha de añadir el identificador del recurso. Ejemplo: R.drawable.ic_notification_icon.
  • El campo channel_id es la cadena utilizada como identificador del canal de notificaciones. Es el parámetro id al instanciar la clase NotificationChannel en su proyecto.
  • El campo notification_id es el identificador de las notificaciones de su proyecto. Es el parámetro id de la función startForeground de creación del servicio;


Activación del servicio de localización.

Una vez instanciada la clase y configurados los parámetros de notificación ha de llamar a la función GPSTracking.start() para iniciar el envío de localizaciones.

   gpsTracking.start();

Activación del servicio a partir de la versión 6.0. o Marshmallow.

El servicio de localización requiere, entre otros, el permiso android.permission.ACCESS_FINE_LOCATION, considerado como crítico por Google. Para versiones de Android iguales o superiores a la 6.0 es necesario que la app conceda expresamente este permiso al menos la primera vez que sea requerido. Para ello, ha de implementar el siguiente código:

   if (Build.VERSION.SDK_INT >= 23) {
   
   	UtilsRequestPermissions.checkPermission(this, "android.permission.ACCESS_FINE_LOCATION", 1, new UtilsRequestPermissionsListener() {
   
                  @Override
                   public void onPermissionGranted() {
                       gpsTracking.start();
                   }
   
                   @Override
                   public void onPermissionRequest() {
                       ActivityCompat.requestPermissions(MyActivity.this,
                               new String[]{"android.permission.ACCESS_FINE_LOCATION"},
                               1);
                   }
   
                   @Override
                   public void onPermissionPreviouslyDenied() {
                       new AlertDialog.Builder(MyActivity.this)
                               .setTitle(R.string.titulo_permiso_requerido)
                               .setMessage(R.string.aviso_de_uso_de_localizacion)
                               .setPositiveButton("Permitir", new DialogInterface.OnClickListener() {
                                   @Override
                                   public void onClick(DialogInterface dialog, int which) {
                                       ActivityCompat.requestPermissions(MyActivity.this,
                                               new String[]{"android.permission.ACCESS_FINE_LOCATION"},
                                               1);
                                   }
   
                               })
                               .setNegativeButton("Denegar", new DialogInterface.OnClickListener() {
                                   @Override
                                   public void onClick(DialogInterface dialog, int which) {
                                       dialog.cancel();
                                   }
                               })
                               .show();
                   }
   
                   @Override
                   public void onPermissionDisabled() {
                       neverAskAgain_AFL = MyActivity.this.getSharedPreferences("permisos", Context.MODE_PRIVATE).getBoolean("neverAskAgain_AFL",false);
   
                       if(!neverAskAgain_AFL){
                           neverAskAgain_AFL = MyActivity.this.getSharedPreferences("permisos", Context.MODE_PRIVATE).edit().putBoolean("neverAskAgain_AFL",true).commit();
                           new AlertDialog.Builder(MyActivity.this)
                                   .setTitle(R.string.titulo_permiso_deshabilitado)
                                   .setMessage(R.string.info_como_habilitar_localizacion)
                                   .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                       @Override
                                       public void onClick(DialogInterface dialog, int which) {
                                           dialog.cancel();
                                       }
   
                                   })
                                   .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                       @Override
                                       public void onClick(DialogInterface dialog, int which) {
                                           dialog.cancel();
                                       }
                                   })
                                   .show();
                       }
                   }
       });
   
   }
   else {
       gpsTracking.start();
   }


Finalización del servicio.

Puede parar el servicio de localización en el momento que desee, utilizando la función GPSTracking.stop().

   gpsTracking.stop();

En caso de deshabiltar la opción de localización GPS del dispositivo, el servicio GPSTracking se mantendrá a la espera hasta que vuelva a habilitarse la opción.