Skip to content
Permisos App Android 6.0

Android 6.0 Marshmallow: cambios para desarrolladores

Android 6.0 Marshmallow
1. Android 6.0 Marshmallow: presentación
2. Android 6.0 Marshmallow: cambios para desarrolladores
3. Android 6.0: desarrollo App ejemplo con gestión de permisos
4. Video: proyecto Android 6.0 Marshmallow

Siguiendo con las novedades más destacadas que nos trae Android 6.0 Marshmallow vamos a ver algunos de los cambios más significativos a la hora de desarrollar Apps para esta nueva versión.

Barra flotante para selección de texto

En Android Marshmallow, al seleccionar texto dentro de una aplicación, aparecerá una barra de herramientas flotante con las opciones de Cortar, Copiar o Pegar. Será de gran similitud a la barra de acción contextual. Puedes ver el proceso en esta imagen animada:
Selección de texto: imagen animada

 

Para poder configurar y hacer uso de este tipo de barra flotante se deberán realizar los siguientes pasos:

  • En el objeto View o Activity, cambiar la llamada a ActionMode desde startActionMode(Callback) por startActionMode(Callback, ActionMode.TYPE_FLOATING).
  • La implementación ActionMode.Callback deberá extender de ActionMode.Callback2.
  • Sobrescribir el método onGetContentRect() para proporcionar el proveedor de coordenadas del contenido del objeto Rect en la vista (selección de texto en modo rectangular).
  • Si no es posible el posicionamiento rectangular, y es el único elemento que será inválido, invocar el método invalidateContentRect().

Eliminación del soporte al cliente HTTP

En Android 6.0 se elimina el soporte al cliente HTTP. Desde la documentación oficial de Android, nos recomiendan que si utilizamos el API 9 o superior, implementemos la clase HttpURLConnection, ya que se trata de una opción más eficiente (menos consumo de energía).

En el supuesto de querer seguir utilizando el cliente HTTP, se deberá añadir como dependencia dentro del archivo build.gradle:

Validaciones APK

En esta nueva versión de Android, se establecen mayores restricciones a la hora de validar los archivos APK. Este no se declarará válido si uno de sus archivos está presente en el AndroidManifest pero no en el propio APK.

Cambios en Android Keystore

Aunque sigue siendo compatible con ECDSA (Elliptic Curve Digital Signature Algorithm, modificación del algoritmo DSA), Android 6.0 deja de dar soporte a DSA (Digital Signature Algorithm, estándar para firmas digitales).

Cambios en servicio de la cámara

La principal novedad que se aprecia a la hora del acceso a los recursos compartidos de la cámara, es el cambio de filosofía de «first come, first serve» (primero en llegar, primer servido) al modelo de acceso donde se favorecen los procesos de alta prioridad. Este cambio de modelo en Android Marshmallow, permite que se puedan dar los siguientes casos:

  • Cuando un cliente tiene activa la cámara en una aplicación de menor prioridad, esta podrá ser expulsada por una app de mayor prioridad (aplicaciones de usuarios visibles o en primer plano).
  • Al cambiar del usuario propietario cuando una app utilice la cámara, será expulsado del acceso a dicho soporte.

Cambios en la gestión de permisos

Android 6.0 introduce la gestión de permisos de una aplicación en tiempo de ejecución, o lo que es lo mismo, el usuario podrá asignar permisos a una aplicación una vez que esté ya instalada, pudiendo revocar dichos permisos asignados.

En primer lugar, no estaría mal recordar de que se trata cuando hablamos de permisos del sistema. Cada aplicación que se ejecuta en Android, lo hace desde un entorno limitado, en el que si desea acceder a recursos del sistema o de otra aplicación, necesitará solicitar permisos de manera explícita, y dependiendo del tipo de permiso el sistema lo concederá de manera automática o solicitará al usuario la aprobación de dicha solicitud.

Hasta la versión Marshmallow, todo desarrollo que necesitaba de recursos externos a la aplicación, era necesario declarar los permisos previamente en el AndroidManifest.xml de la aplicación antes de su instalación y ejecución en el dispositivo. Con esta nueva versión de Android 6.0, será posible declarar permisos de una aplicación en tiempo de ejecución, simplificando en gran medida el proceso de instalación de la aplicación.

Es necesario aclarar que cuando se asignan permisos a una aplicación, es de gran importancia ser conscientes del grado de actuación de ese permiso, ya que es posible declarar permisos de diferente índole:

  • Permisos normales: no arriesgan la privacidad del usuario, y será otorgado de manera automática al ser incluido en el AndroidManifest.xml.
  • Permisos peligrosos: pueden permitir el acceso a datos privados del usuario, y el usuario deberá dar de manera explícita el permiso a la aplicación.

En las siguientes líneas, se describirán algunas de las recomendaciones que nos proponen desde la documentación oficial de Android para asignar permisos a una aplicación en tiempo de ejecución:

  • Tanto para la declaración de permisos normales, como permisos peligrosos, es necesario tener muy presente la versión dónde se ejecutará nuestra aplicación:
    • Si está destinada a la versión 5.1 o inferior (API 22 o inferior), se deberá asignar un permiso peligroso antes de la instalación de la app.
    • Si está destinada a la versión 6.0 o superior (API 23 o superior), el usuario deberá asignar los permisos en el AndroidManifest.xml, y serán solicitados de manera explícita al usuario en tiempo de ejecución, pudiendo en cualquier momento denegar o conceder nuevos permisos sin que afecte a la ejecución de la aplicación (al resto de operación ajenas a dicho permiso denegado).
  • Será imprescindible la comprobación de un permiso peligroso por cada operación que necesite de dicho permiso para ser realizada. Para la realización de dicha comprobación, bastará con incluir las siguientes líneas de código:
    El código anterior comprobará si la aplicación tiene el permiso necesario, en la que el método devolverá PackageManager.PERMISSION_GRANTED. En caso de que el permiso solicitado no se haya asignado, el método devolverá PackageManager.PERMISSION_DENIED
  • Petición de permisos.Cuando una aplicación necesita de un permiso que no ha sido asignado, bastará con llamar al método requestPermissions() para solicitar un determinado permiso. A continuación, la aplicación solicitará los permisos necesarios al usuario junto con un número de petición (en el ejemplo MY_PERMISSIONS_REQUEST_READ_CONTACTS), que de forma asíncrona devolverá el mismo código de petición, una vez el usuario haya respondido al diálogo en pantalla:
  • Respuesta a la petición del permiso.Una vez se muestra el diálogo que describe la utilidad del permiso solicitado, el usuario podrá seleccionar si desea dar el permiso o denegarlo, en cualquiera de los dos casos se invocará de manera automática al método onRequestPermissionsResult(), que recibirá la respuesta del usuario, y devolverá el acceso o no a los recursos del permiso:

Cuadro diálogo con mensaje petición de permiso

Un aspecto de gran importancia cuando hablamos de permisos, es ayudar al usuario a entender por qué necesitamos dicho permiso en la aplicación, sobre todo cuando éste ha rechazado de manera explícita el uso de un determinado permiso pero sigue intentando acceder a la aplicación. Es ahí donde Android nos permite mostrar un breve diálogo sobre el motivo del uso de dicho permiso, aclarando la utilidad del permiso solicitado.

Para ello bastará con utilizar el método shouldShowRequestPermissionRationale() , que devolverá true si ya se ha solicitado este permiso y el usuario ha negado su uso. En el supuesto de que el usuario haya indicado con anterioridad Don’t ask again (no preguntar de nuevo), este método devolverá *false.


Créditos: las imágenes que aparecen en esta publicación están elaboradas por Android Developer y compartidas con Licencia Creative Commons 2.5 Attribution

 

Esta entrada tiene un comentario

Los comentarios están cerrados.

Volver arriba
Esta web usa cookies para su correcto funcionamiento. No hay cookies de publicidad, aunque algunos de los contenidos mostrados (videos o documentos insertados) están alojados en servicios externos (Youtube, Vimeo, Box...) que sí pueden implementar sus propias cookies. También se ha incluido en pruebas un Agente AI que incluye sus propias cookies   
Privacidad