Todos sabemos que Android Marshmallow introdujo autorizaciones de tiempo de ejecución que permiten a los usuarios permitir o negar cualquier autorización durante la ejecución. La implementación de las autorizaciones de tiempo de ejecución es un proceso aburrido y el desarrollador debe escribir mucho código solo para obtener una sola autorización.
En este artículo, simplificaremos el proceso utilizando Diestro biblioteca. Usando esta biblioteca, las autorizaciones se pueden implementar en unos minutos.
Este es un artículo introductorio sobre Dexter que cubre las características básicas ofrecidas por la biblioteca. Dexter proporciona otras características, como el uso con Snackbar, diferentes tipos de oyentes, gestión de errores y pocas otras. Puede encontrar más información sobre Dexter revelador página.
1. Biblioteca de autorización de Dexter
Para comenzar con Dexter, agregue la adicción al tuyo Build.gradle
Adicciones {// Implementación de permisos de tiempo de ejecución Dexter ‘Com.Karumi: Dexter: 6.2.3’}
1.1 Solicitud de autorización única
Para solicitar una sola autorización, puede usar Consmission () Método aprobando la autorización solicitada. También necesitas un Autorización devoluciones de llamada para recibir el estado de la autorización.
- El método OnpermissionGranced () La autorización se llamará una vez.
- Onpermissonssundenied () Se llamará cuando se niegue el permiso. Aquí puede verificar si la autorización se niega permanentemente usando Respuesta. ISPermantyDenied () condición.
Solicitudes de ejemplo a continuación CÁMARA autorización. Dexter.withContext (this) .withpermission (manifest.permission.camera) .withlistenner (objeto: autorización {anular diversión ondpermissionGrade (respuesta: autorización de respuesta a la respuesta) {// congrisi. Se otorga el permiso. Es posible abrir la línea de la cámara abierta () Permanente de la cámaras abiertas. {ShowsettingsDiaog ()}} sobrescribido de OnPermissionAlShoundbeshawn enorme (Autorización: ¿Autorización?
1.2 Solicitud de autorizaciones múltiples
Para solicitar múltiples autorizaciones al mismo tiempo, puede usar Conmissions () método. Según las solicitudes de código Read_contacts Y Read_call_log autorizaciones. Dexter.withContext (this) .withperMissions (manifest.permission.edead_contacts, manifest.permission.read_call_log) .withlistenner (objeto: múltiple permissionSlistenner {sobrecarga supermissionschecked (relación (RELATA (RELAF. se otorgan! “, toast.length_short) .show ()} // Controla la negación permanente de cualquier autorización (informesperminingusentydyd) onpermissionShoshowhowhowhowhowhowhowwn (autorizaciones: list?, token: autorizationToke) {token.continuepermississionRequest ()}). .controlar ()
1.3 Gestión de errores
Para capturar cualquier error que ocurriera durante la solicitud de un permiso, use Permiss.irissequeststerRororIstenner. Dexter.withContext (this) .WithPermission (manifest.permission.camera) .withListenner (objeto: ….) .withorlisthener {error -> toast.maketext (applicationContext, “Error ocurrió! $ Error”, toast.length_short). } .controlar()
2. Ejemplo completo
Ahora veamos cómo usar Dexter en un proyecto de ejemplo.
- Cree un nuevo proyecto en Android Studio DA Archivo ⇒ Nuevo proyecto y seleccionar Actividades básicas de los modelos.
- Agregar adicción a Dexter a la tuya Build.gradle
Adicciones {// Implementación de permisos de tiempo de ejecución Dexter ‘Com.Karumi: Dexter: 6.2.3’}
- Abierto Cadenas.xml Y agregue las siguientes autorizaciones de tiempo de ejecución para autorizaciones para autorizaciones para autorizaciones a múltiples permisos requieren autorizaciones Esta aplicación requiere que la autorización use esta función. Puede otorgarlos en la configuración de la aplicación. Cancelar ir a la configuración
- Abra el archivo de diseño de su actividad principal Activity_Main.xml Y agregue dos botones para probar diferentes métodos de autorización.
- Abrir el De los principales y realice el cambio como se muestra a continuación.
- El botón de cámara de contacto requiere autorización de la cámara usando RequestCamerapermision () método.
- Solicitud de recolección de múltiples autorizaciones, solicitudes Read_contacts & read_call_log autorizaciones utilizando RequestMultplePermissions ().
- Si la autorización se niega de forma permanente, llame ShowsettingSiaog () Muestre un cuadro de diálogo que navega por la configuración del sistema en la que el usuario puede otorgar autorizaciones manualmente.
Info.androidhive paquete.runtime_permissions import android.manifest import android.content.inten import android.net.uri import android.os.bundle import android.prider.mediastore import android.prider.settings import android.widget.toast. androidx.result.result.concaltStitivity.ContraStrastastrastastastastastastastastastastastastastastastastastastastasteys androidx. com.karumi.dexter.multplePermissionsReport Imports com.karumi.dexter.peristica com.karumi.dexter.listener.permissideniesponseponse Imports com.karumi.dexter.listener.permissionScRanceresponse importó com.karumi.dexter.listener. com.karumi.dexter.listener.multi.mulitlepermissslistener com.karumi.dexter.listenner.single.permissionista import info.androidhive.runtime_permissions.dataBinding.actityMainbinding RegistroForActivityResult (ActivitySultContracts.StactTivityFortesUlT ()) {} var private request Soldopensetings = RegisterForActivityResult (activitResultConttrattcts.stactityForResult ()) {} prevalece sobre la diversión (savedInStancestate: bundle?) SetConcontentView (binde.roroot) Binding.BtnCamerApermission.SetOnClickListener {requestCamerapermision ()} binding.btnmultippermissi.setOnClickListener {requestMultipePermissions ()}}}} / ** * Solicitud para múltiples permanentes (registro de audio y localización) en un momento permanente Open la configuración de la configuración * / privado. {Dexter.withContext (this) .withperMissions (manifest.permission.read_contacts, manifest.permission.read_call_log)) .withlistenner (objeto verifica si todas las autorizaciones se otorgan si (informes se otorgan. Toast.length_short) .show ()} // Controla la negación permanente de cualquier autorización if (report.isanypermissidenydenied) { / // Mostrar alerta de alerta DadatesattingDattating por diálogo ()}}} Reemplazar el OnPermissionalShounshoundbshown Onpermissial Fun (Autorizations: List?, Tokeken) {token.continuePermMissionStast ()}}). WitherroristStener {toast.maketext (applicationContext “, se ha producido un error!”, Toast.length_short) .show ()} .ronsamethread () .Check ()} / ** * Solicitar la autorización de la cámara * Esto usa el modelo de autorización único de Dexter * una vez que se ha otorgado la autorización, Open la cámara de la cámara de la cámara permanente. AuthorizationListenner {anular diversión onpermissionGranted (respuesta: autorización directa) {// La autorización se otorga opencamera ()} anular diversión ondpermissonsonDened (respuesta: autorización {// Permanente Verificación permanente de verificación de verificación de la consulta Si (respuesta. (R.String.Cancel)) {diálogo, que -> // responde al botón neutral}
Realice el código y verlo en acción.
Déjame saber tus preguntas en la sección de comentarios a continuación.
¡Saludos!
Código feliz