Antes del lanzamiento de M, el modelo de permisos de Android ha sido una decisión de todo o nada para los usuarios en el momento de la instalación. Esto significaba que si un usuario quería usar una aplicación, primero tenía que aceptar todos los permisos incluidos en la aplicación o elegir no instalarla en absoluto. Esto llevó a muchos desarrolladores a perder las instalaciones de aplicaciones, una desconexión de confianza entre los usuarios y los desarrolladores, y otras preocupaciones de privacidad..
Bajo el nuevo modelo de permisos, los usuarios podrán aprobar los permisos en tiempo de ejecución cuando sean necesarios y pueden denegar dichos permisos en cualquier momento. En este artículo, aprenderá cómo este cambio en el manejo de los permisos lo afectará a usted como desarrollador y cómo sus usuarios experimentarán sus aplicaciones..
Cabe señalar que este artículo se escribió antes del lanzamiento oficial de Android M, por lo que parte de la información puede cambiar con el lanzamiento oficial..
Mientras que Android M aún requiere permisos para ser declarado en AndroidManifest.xml, ahora se requerirá que los usuarios aprueben o denieguen el uso de ese permiso en tiempo de ejecución. Un cambio importante en la nueva versión de Android es que android.permission.INTERNET
y android.permission.WRITE_EXTERNAL_STORAGE
se han rebajado de una calificación de peligroso a normal. Esto significa que no necesita preguntar al usuario antes de usar.
Al solicitar la aprobación del permiso, se le solicitará al usuario que se base en el grupo de permisos, en lugar de que se le solicite aprobar todos los permisos dentro de un grupo. Esto significa que si su aplicación necesita enviar y recibir mensajes SMS, solo se le pedirá a su usuario que apruebe el grupo de permisos de SMS. A continuación se muestra una lista de los grupos de permisos admitidos actualmente en Android M Developer Preview 2 como se ve en la configuración del sistema.
También hay que señalar que Android presenta un robusto Intención
Sistema, que permite a los desarrolladores solicitar datos de otras aplicaciones. En lugar de solicitar el permiso de la cámara y desarrollar una aplicación que utilice las API de la cámara desde cero, puede solicitar al usuario que tome una fotografía con una aplicación de cámara que ya sea confiable para obtener una imagen en su aplicación. Los permisos relacionados con la cámara serán manejados por la aplicación de la cámara..
Cuando necesita usar una función que requiere un permiso, hay un flujo general de eventos que sucederán. Primero debe ver si ese permiso ya ha sido aprobado por su usuario.
Si el usuario no ha aprobado el permiso, puede presentarle un cuadro de diálogo de solicitud de permiso. La primera vez que se lo presente al usuario, tendrán que denegar o aprobar el permiso..
Sin embargo, si previamente han negado el permiso y se les vuelve a preguntar, tendrán la opción de optar por que nunca se les vuelva a pedir ese permiso..
Puede verificar si un permiso ha sido otorgado previamente llamando checkSelfPermission
antes de usar una característica que requerirá ese permiso. Este método devuelve un En t
Valor basado en si el permiso se otorga o no.
Si es igual a PackageManager.PERMISSION_GRANTED
, entonces puede continuar como se esperaba. Sin embargo, si ese permiso no se ha otorgado previamente, puede solicitarlo con solicitud de permisos
, pasando una serie de cadenas de permisos y una costumbre En t
código de solicitud para realizar un seguimiento del flujo lógico de su aplicación.
int hasLocationPermission = checkSelfPermission (Manifest.permission.ACCESS_FINE_LOCATION); int hasSMSPermission = checkSelfPermission (Manifest.permission.SEND_SMS); Listapermisos = nueva ArrayList (); if (hasLocationPermission! = PackageManager.PERMISSION_GRANTED) permissions.add (Manifest.permission.ACCESS_FINE_LOCATION); if (hasSMSPermission! = PackageManager.PERMISSION_GRANTED) permissions.add (Manifest.permission.SEND_SMS); if (! permissions.isEmpty ()) requestPermissions (permissions.toArray (nueva String [permissions.size ()]), REQUEST_CODE_SOME_FEATURES_PERMISSIONS);
Una vez solicitud de permisos
se llama, al usuario se le presenta un cuadro de diálogo de solicitud para cada grupo de permisos para el que su aplicación solicita permiso. Es una práctica recomendada solo solicitar los permisos según sea necesario, en lugar de hacerlo de forma masiva cuando el usuario inicia su aplicación por primera vez.
Cuando tu usuario haya terminado con los diálogos., onRequestPermissionsResult
Se llama y se puede acceder en su Actividad
. Aquí es donde puede iniciar su función o manejar la situación en la que su usuario ha denegado uno o más permisos..
A continuación se muestra un ejemplo de cómo verificar si se ha otorgado o denegado un permiso. Si el usuario ha denegado los permisos requeridos para su función, debe deshabilitarla e informarle por qué no funciona en su aplicación..
@Override public void onRequestPermissionsResult (int requestCode, String [] permissions, int [] grantResults) switch (requestCode) case REQUEST_CODE_SOME_FEATURES_PERMISSIONS: for (int i = 0; i < permissions.length; i++ ) if( grantResults[i] == PackageManager.PERMISSION_GRANTED ) Log.d( "Permissions", "Permission Granted: " + permissions[i] ); else if( grantResults[i] == PackageManager.PERMISSION_DENIED ) Log.d( "Permissions", "Permission Denied: " + permissions[i] ); break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Mientras que las aplicaciones que están creadas para Android M son necesarias para implementar los nuevos diálogos y métodos de permisos, las aplicaciones creadas para versiones anteriores de Android aún presentarán a los usuarios una lista de permisos en el momento de la instalación. Aunque los permisos se aceptan antes de que los usuarios puedan usar su aplicación, aún pueden ser revocados en cualquier momento.
Debido a que la infraestructura para manejar los permisos revocados no estará disponible en las aplicaciones que se dirigen a menos de Android M, se devolverán todas las características que hubieran requerido permisos. nulo
, 0
, o un valor vacío cuando no se conceden los permisos. Esto puede provocar un comportamiento inesperado en las aplicaciones, por lo que se recomienda que los desarrolladores se preparen para actualizar sus aplicaciones para que sean compatibles con el nuevo modelo de permisos de Android M lo antes posible..
En este artículo, aprendió sobre el nuevo modelo de permisos de Android M y sobre cómo admitir permisos actualizados en sus aplicaciones. También hemos cubierto cómo las aplicaciones responderán a la nueva versión de Android cuando se hayan creado para versiones anteriores. Con esta información, debería poder preparar sus aplicaciones para el lanzamiento oficial de la próxima actualización de Android..