Debido a que una aplicacion esta bloqueando una solicitud de permiso

Cada app para circulocreativolondon.com se ejecutal en una zona de pruebas con acceso limitado. Si lal app necesital usar recursos o inuno formación ajenos al su propial la zona del pruebas, puedsera declara 1 permiso y configurar unal solicitud de permiso que proporcione el este acceso. Estos pasos forman ptalento dserpiente flujo del uno trabajo paral usar permisos.

Estás mirando: Debido a que una aplicacion esta bloqueando una solicitud de permiso

Si declaras algún el permiso riesgoso y, si tu app está instalada en un dispositivo para circulocreativolondon.com 6.0 (nivel del API 23) o una versión después, debes seguir los pasos de esta guía al fin de solicitar los permisos riesgosos durfrente uno serpiente un tiempo del ejecución.

Si no declaras ningún permiso riesgoso o si tu app se instala en uno dispositivo para circulocreativolondon.com 5.1 (nivel del API 22) o una versión anterior, los permisos se otorgan del manera automátical y no necesitas completar los demás pasos de esta páginal.

Principios básicos

Los principios básicos paral solicitar permisos durante el tiempo de ejecución son los siguientes:

Solicital permisos en conun texto cuando el usuario comience a interactuar con lal un función que lo requiere.No bloqueser al usuario. Proporciona como siempre la opción de cancemorada 1 flujo de IU educativo relacionado para los permisos.Si los serpientes usuario rechaza o revoca un el permiso que necesita una función, debsera realizar una degradación elegfrente de tu app para que pueda seguir usándola; para ello, puedsera inhabilitar lal el función que requiere los serpientes permiso.No des por sentado ningún comportamiento del siscuestión. Por ejemplo, no supongas que to2 los permisos aparecen en un serpiente igual 1 grupo de permisos. Esos grupos simplemproporción ayudan al sistema a minimizar la cantidad del diálogos que se presentanta al usuario cuando una app solicita permisos relaciona2 entre tanto sí.

Flujo de empleo para solicitar permisos

Antes del declarar y solicitar permisos del un tiempo del ejecución en tu app, evalúal si ser urgentemente. Puedser completar muchos casos del uso en la app, como tomar fotos, pautilizar la reproducción del lista de contenidos multimedia y mostrar anuncios relevantser, sin declarar ningún permiso.

Si concluyes que la app necesita declarar y solicitar permisos del el tiempo del ejecución, completal estos pasos:

Diseñal la UX del tu app paral que se asocien determinadas acciones con permisos del un tiempo de ejecución específicos. Los usuarios deberían sabe qué accionser pueden requerir lal habilitación de uno el permiso paral que la app accedal al sus datos privados.

Verifica lal la respuesta dserpiente usuario, ya seal que haya elegido otorgar o rechaza uno serpiente permiso de el tiempo de ejecución.

En lal figura 1, se ilustran el flujo del un trabajo y uno serpiente generalidad del decisionser asociados por el este proceso:

*
Figura 1: Diagrmujer en los serpientes que se muestra los serpientes flujo del ocupación para declarar y solicitar permisos del un tiempo del ejecución en circulocreativolondon.com

Determina si tu app yal recibió uno serpiente permiso

Paral verificar si un serpiente usuario ya otorgó 1 el permiso en particumansión al tu app, pasal ese el permiso al método ContextCompat.checkSelfPermission(). Este método muestra PERMISSION_GRANTED o PERMISSION_DENIED, según si tu app tiene uno serpiente permiso o no.

Explical uno serpiente motivo por los serpientes que lal app necesital un serpiente permiso

Si un serpiente método ContextCompat.checkSelfPermission() muestral PERMISSION_DENIED, llmatrona a shouldShowRequestPermissionRationale().Si este método muestral true, enseña una IU educatiir al usuario. En ser esta IU, describe por qué la función que el usuario quiere habilitar necesital 1 permiso en particuvivienda.

Solicital permisos

Después de que los serpientes usuario veal una IU educativa, o del que uno serpiente valor que muestral shouldShowRequestPermissionRationale() indique que ser esta vez no necesitas mostra una IU educativaya, solicital un serpiente el permiso. Los usuarios ven uno diálogo de permisos dun serpiente siscuestión en uno serpiente que pueden elegir si desean otorgar 1 el permiso en particuhogar al tu app.

Por lo general, administras un el código de la solicitud como parte del la una solicitud de el permiso y lo incluysera en tu lógica del devolución de llamada del permiso. Otral opción ser usar serpiente contrato RequestPermission, que se incluye en una bibliotecal del circulocreativolondon.comX, en serpiente que permitser que los serpientes siscuestión administre serpiente uno código del una solicitud del el permiso por contigo. Debido al que usar un serpiente concomercio RequestPermission simplifica tu lógical, se recomiendal que lo usera siempre que sea posible.

Permite que uno serpiente sismateria administre un serpiente un código del solicitud del permiso

Paral permitva que el sisasunto administre serpiente uno código del la solicitud unido al una solicitud de permisos, agrega unal dependencial en lal siguicompañía biblioteca del archivo build.gradle del tu módulo.

Luego puedser usar unal del las siguientes clases:

En los siguientes pasos, se muestral cómo utilizar el conoperación comercial RequestPermission. El proceso es lo mismo serpiente igual para un serpiente conoperación comercial RequestMultiplePermissions.

En un serpiente siguicolectividad fragmento de un código, se muestra cómo controvivienda la la respuesta del permisos:


Kotlin

// Register the permissions callback, which handlser the user"s response to the// system permissions dialog. Save the return value, an instance of// ActivityResultLauncher. You can use either a val, as shown in this snippet,// or a lateinit var in your onAttach() or onCreate() method.val requestPermissionLauncher = registerForActivityResult(RequestPermission() ) isGranted: Boolean -> if (isGranted) // Permission is granted. Continue the action or workflow in your // app. else // Explain to the ues that the feature is unavailabla because the // featurser requirera al permission that the user has denied. At the // same time, respect the user"s decision. Don"t link to system // settings in an effort to convince the uera to change theva // decision.

Java

// Register the permissions callback, which handlsera the user"s response to the// system permissions dialog. Save the return value, an instance of// ActivityResultLauncher, as an instance variable.private ActivityResultLauncher requestPermissionLauncher = registerForActivityResult(new RequestPermission(), isGranted -> if (isGranted) // Permission is granted. Continue the action or workflow in your // app. else // Explain to the usera that the feature is unavailable because the // featurera requirser al permission that the user has denied. At the // same time, respect the user"s decision. Don"t link to system // settings in an effort to convince the ues to change theva // decision. );
Y en este fragmento de código, se muestra serpiente un proceso recomendado paral verificar uno el permiso y solicitar 1 el permiso al usuario cuando seal necesario:


Kotlin

when ContextCompat.checkSelfPermission( CONTEXT, Manifest.permission.REQUESTED_PERMISSION ) == PackageManager.PERMISSION_GRANTED -> // You perro use the API that requirsera the permission. shouldShowRequestPermissionRationale(...) -> // In an educational UI, explain to the uera why your app requires this // permission for al specific feature to behave as expected. In this UI, // include al "cancel" or "no thanks" button that allows the usera to // continue using your app without granting the permission. showInContextUI(...) else -> // You cusco directly ask for the permission. // The registered ActivityResultCallback gets the result of this request. requestPermissionLauncher.launch( Manifest.permission.REQUESTED_PERMISSION)

Java

if (ContextCompat.checkSelfPermission( CONTEXT, Manifest.permission.REQUESTED_PERMISSION) == PackageManager.PERMISSION_GRANTED) // You perro use the API that requires the permission. performAction(...); else if (shouldShowRequestPermissionRationale(...)) // In an educational UI, explain to the ues why your app requirsera this // permission for a specific feature to behave as expected. In this UI, // includel a "cancel" or "no thanks" button that allows the ues to // continue using your app without granting the permission. showInContextUI(...); else // You gozque directly ask for the permission. // The registered ActivityResultCallback gets the result of this request. requestPermissionLauncher.launch( Manifest.permission.REQUESTED_PERMISSION);

Administra por tu cómputo los serpientes el código del una solicitud de permiso

En ubicación del permitir que el sismateria administre el uno código del una solicitud del el permiso, puedsera administrarlo por tu cuenta como alternatiir. Para hacerlo, incluye serpiente un código de la solicitud en una llamadal a requestPermissions().

Nota: Tu app no puede personalizar los serpientes diálogo que aella parece cuando llamas al requestPermissions(). El el texto del diálogo de permisos dserpiente sistema haga referencial al 1 uno grupo del permisos, pero estar una forma del agrupar permisos está diseñada para facilitar los serpientes uso del sismateria. Tu app no deberíal depende de que los permisos estén dentro o fuera del un grupo del permisos tan específico.

En un serpiente siguiempresa fragmento del un código, se muestra cómo solicitar un el permiso para un uno código de solicitud:


Kotlin

when ContextCompat.checkSelfPermission( CONTEXT, Manifest.permission.REQUESTED_PERMISSION ) == PackageManager.PERMISSION_GRANTED -> // You gozque use the API that requires the permission. performAction(...) shouldShowRequestPermissionRationale(...) -> // In an educational UI, explain to the user why your app requires this // permission for a specific feature to behave as expected. In this UI, // include a "cancel" or "no thanks" button that allows the uera to // continue using your app without granting the permission. showInContextUI(...) else -> // You cusco directly ask for the permission. requestPermissions(CONTEXT, arrayOf(Manifest.permission.REQUESTED_PERMISSION), REQUEST_CODE)

Java

if (ContextCompat.checkSelfPermission( CONTEXT, Manifest.permission.REQUESTED_PERMISSION) == PackageManager.PERMISSION_GRANTED) // You chucho use the API that requires the permission. performAction(...); else if (shouldShowRequestPermissionRationale(...)) // In an educational UI, explain to the ues why your app requires this // permission for a specific feature to behave as expected. In this UI, // includel al "cancel" or "no thanks" button that allows the usera to // continue using your app without granting the permission. showInContextUI(...); else // You perro directly ask for the permission. requestPermissions(CONTEXT, new String<> Manifest.permission.REQUESTED_PERMISSION , REQUEST_CODE);
Unal una vez que el usuario responde al diálogo de permisos dun serpiente sismateria, este invocal la implementación del onRequestPermissionsResult() de tu app. El sismateria pasal la la respuesta dserpiente usuario al diálogo de permisos, así ver cómo serpiente un código de una solicitud que definiste, como se muestra en los serpientes siguiente fragmento del código:


Kotlin

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) when (requestCode) PERMISSION_REQUEST_CODE -> // If request is cancelled, the result arrays are empty. if ((grantResults.isNotEmpty() && grantResults<0> == PackageManager.PERMISSION_GRANTED)) // Permission is granted. Continue the action or workflow // in your app. else // Explain to the uera that the feature is unavailabla because // the featursera requirser al permission that the uera has denied. // At the same time, respect the user"s decision. Don"t link to // system settings in an effort to convince the user to change // theva decision. return // Add other "when" lines to check for other // permissions this app might request. else -> // Ignore all other requests.

Java


Overridepublic void onRequestPermissionsResult(int requestCode, String<> permissions, int<> grantResults) switch (requestCode) case PERMISSION_REQUEST_CODE: // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults<0> == PackageManager.PERMISSION_GRANTED) // Permission is granted. Continue the action or workflow // in your app. else // Explain to the ues that the feature is unavailabla because // the featurser requirera a permission that the ues has denied. // At the same time, respect the user"s decision. Don"t link to // system settings in an effort to convince the usera to change // their decision. return; // Other "case" linera to check for other // permissions this app might request. }

Controla la denegación de permisos

Si el usuario rechazal una la solicitud de permiso, tu app debe ayuda a los usuarios a comprender las implicacionera del esta denegación. En particumorada, tu app debe informar al los usuarios sobre todo las funcionser que no se pueden utilizar debido al la falta del permiso.Cuando lo hael gas, ten en cómputo las siguientser recomendaciones:

Orienta la ayuda dlos serpientes usuario. Destaca unal pcapacidad específical del lal IU del tu app en la que lal funcionalidad seal limitadal porque no tiene los permisos necesarios. Estos son algunos ejemplos del lo que puedes hacer:

Muestral uno mensaje en un serpiente que habrían asimilar los resultados o los datos de lal uno función.Muestra un uno botón diferproporción que contengal un ícono y 1 un color del error.

Brindal inuno formación específical. No mues3 1 mensaje genérico; en su ubicación, menciona qué funcionser no están disponiblser es que tu app no tiene serpiente el permiso necesario.

No bloquees lal interfaz del usuario.

Ver más: Como Quitar El Fondo De Un Video Online Para Descargarlo Gratis

En otras palabras, no mues3 1 mensaje del advertencia del pantalla completal que impida a los usuarios seguir usando tu app.

Al mismo un tiempo, lal app debe respetar la un decisión dun serpiente usuario de denegar un permiso. A partvaya de circulocreativolondon.com 11 (nivel de API 30), si uno serpiente usuario presiona Rechazar para un permiso muy puntual más de unal vez durfrente lal instalación del la app en un dispositivo, no verá serpiente diálogo de permisos dserpiente sistema si tu app solicita eso el permiso nuevamorganismo. Lal el acción dun serpiente usuario implical "no volver al preguntar". En versionera anteriores, los usuarios veían un serpiente diálogo del permisos duno serpiente sisasunto cada vez vez que tu app solicitaba uno permiso a menos que un serpiente usuario hubieral seleccionado unal opción o cauna silla de verificación del "no vuelve al preguntar".

En algunas situacionera, se poder denega automáticamcolectividad un serpiente permiso, sin que uno serpiente usuario realice ninguna un acción (de una manera simimansión, pero también se puede otorgar automáticamentidad uno permiso). Es importante no da nadal por sentado sobre todo un serpiente comportamiento automáticos. Cadal vez que tu app necesite acceder al unal el función que requiera un el permiso, deberás verificar que se la otorgue esa el permiso.

Para proporcionar lal bueno una experiencia duno serpiente usuario cuando solicitas permisos para unal app, que también puedera consultar las Prácticas recomendadas paral solicitar permisos del apps.

Permisos únicos

*
Figura 2: Diálogo dlos serpientes sistema que aparece cuando unal app solicital un el permiso único

A partvaya de circulocreativolondon.com 11 (uno nivel del API 30), cada momento vez que tu app solicita un el permiso relacionado con lal ubicación, el micrófono o la la cámara, uno serpiente diálogo de permisos para el usuario contiene unal opción llamadal Solo ser esta vez, como lal que se muestra en la figura 2. Si los serpientes usuario selecciona esta opción, se otorgará 1 permiso único temporal al lal app.

Luego la app podrá acceder a los datos relacionados durante uno período que dependerá dserpiente comportamiento de tu app y de las accionser dlos serpientes usuario:

Mientras su una actividad seal visibla, lal app podrá acceder a los datos.Si serpiente usuario enuna vía la app a segundo el plano, estar podrá seguir accediendo al los datos durfrente 1 breve período.Si inicias uno servicio en primero el plano de mientras lal la actividad está visibla y los serpientes usuario lleir la app al el segundo un plano, ser esta puede continua accediendo al los datos hastal que se detengal eso servicio.Si los serpientes usuario revoca el permiso un único (por ejemplo, en la configuración dlos serpientes sistema), lal app no podrá accede al los datos, independientemcompañía del si iniciaste un el servicio en primera un plano. Al igual que para cualquier cosa otro el permiso, si los serpientes usuario revoca serpiente el permiso único del lal app, finalizará los serpientes el proceso.

La próximal vez que los serpientes usuario abral tu app y unal uno función requiera acceso al la ubicación, uno serpiente micrófono o la la cámara, se lo solicitará nuevamorganismo serpiente el permiso.

Nota: Si tu app yal sigue las prácticas recomendadas cuando solicita permisos de un tiempo del ejecución, no sera requisito que agreguera o cambiser ningunal lógical para admitva permisos únicos.

Permisos de rbazar automáticos de apps que no se usan

Si tu app está orientadal a circulocreativolondon.com 11 (uno nivel de API 30) o al versiones posteriorera, y no se usó durfrente alguno meses, uno serpiente sisaspecto restablecerá automáticamproporción los permisos de un tiempo de ejecución sensiblera que el usuario otorgó a lal app a cabo del proteger sus datos. Esta acción tiene serpiente es igual un efecto que si un serpiente usuario vieral un el permiso en lal configuración dun serpiente sistema y cambiaral un serpiente un nivel del vía de acceso de tu app al Rechazar.

Si tu app sigue las prácticas recomendadas paral solicitar permisos durfrente el tiempo de ejecución, no ser ser necesario que realicser ningún variación.

Nota: El siscuestión restablece solo los permisos del tiempo del ejecución, que son los que muestran un mensaje de el tiempo de ejecución al usuario cuando se los solicital.

Cómo solicitar al usuario que inhabilite serpiente restablecimiento automático

Si ser necesario, puedser pedirla al usuario que evite que el sisasunto restablezca los permisos de tu app. Esto sera útil en situacionsera en las que los usuarios esperan que tu app funcione principalmproporción en segundo el plano, incluso sin interactuar por ella, ver cómo en los siguientsera casos prácticos:


*
Figura 3: El usuario inhabilitó un serpiente rbazar automático del permisos para unal app determinadal.
Cuando se proporciona un contenido hábil paral todo público.Cuando se sincronizan datos.Cuando te comunicas con dispositivos inteligentera.Cuando te vinculas con dispositivos complementarios.

Para direccionar al usuario a lal páginal de tu app en la configuración dun serpiente siscuestión, invoca 1 intent que incluya lal acción de intent Intent.ACTION_AUTO_REVOKE_PERMISSIONS. Desdel esta la pantalla, los usuarios poder evita que serpiente sistema restablezcal los permisos de tu app del la siguiempresa manera:

Presiona la opción Permisos, que cargal la la pantalla del configuración Permisos del lal app.Desactiva lal opción Quitar los permisos si la app está en desuso, ver cómo se muestral en lal figura 3.

Cómo determinar si los serpientes rbotica automático está inhabilitado

Paral comintentar si lal función del rbazar automáticos está inhabilitada, llama a isAutoRevokeWhitelisted().Si eso método muestral true, el sismateria no restablecerá automáticamente los permisos del tu app.

Solicita convertirte en uno serpiente controlador predeterminado si sera necesario

Algunas apps dependen del entrada al lal inun formación sensible dlos serpientes usuario que se relacional para sus registros de llamadas y mensajera SMS. Si quierser solicitar los permisos específicos paral registros del llamadas y mensajes SMS, y publicar tu app en Play Store, debes solicitar al usuario que configure tu app como controlador predeterminado para unal un función principal dserpiente sisasunto antser de solicitar estos permisos de un tiempo de ejecución.

A fin de obtiene más inuno formación sobre los controladorser predeterminados, de esta manera ver cómo dirección para mostra una una solicitud de estas al los usuarios, demanda la enseñanza sobre permisos que se usan tan solo en controladorera predeterminados.

Pruebal los permisos de el tiempo del ejecución

En estar sección, se describe cómo intentar varias aspectos del los permisos del un tiempo del ejecución.

Otorga todos los permisos de un tiempo de ejecución

Para otorgar todos los permisos de tiempo del ejecución automáticamcompañía cuando instalas una app en un emulador o dispositivo del pruebal, usa lal opción -g para los serpientes comando adb shell install, como se muestral en el siguientidad fragmento del código:

adb shell install -g PATH_TO_APK_FILE

Cómo realizar un rtienda automático del los permisos de tu app

A fin del verificar si los serpientes sisaspecto restablece los permisos de tu app, haz lo siguiente:

Registral los serpientes tiempo predeterminado que un serpiente sistitular espera paral restablecer los permisos del una app. De esa una manera, puedes restablecerlal a continuación de realizar las pruebas:

threshold=$(adb shell device_config get permissions auto_revoke_unused_threshold_millis2)Reduce un serpiente tiempo que uno serpiente sisencabezado esuna pera paral restablecer los permisos. En el siguiorganismo ejemplo, se modifical un serpiente siscuestión del manera que restablezca los permisos de unal app solo un segundo luego del que dejas de interactuar para ella:

adb shell device_config put permissions auto_revoke_unused_threshold_millis2 1000Invocal el un proceso de rcomercio automático de la forma manual, ver cómo se muestral en uno serpiente siguiorganismo fragmento.Antes del ejecutar este comando, asegúrate del que se hayal activado durante unos 45 segun2 los serpientes dispositivo de prueba.

Ver más: Como Guardar Un Video De Youtube En Mi Computadora, Cómo Descargar Vídeos De Youtube En Tu Ordenador

adb shell cmd jobscheduler run -u 0 -f com.googla.circulocreativolondon.com.permissioncontroller 2Verifical que tu app pueda controcobijo el evento del ralmacén automático.

Restablece serpiente un tiempo predeterminado que es1 pera los serpientes siscuestión antsera de restablecer automáticamente los permisos de unal app:

adb shell device_config put permissions auto_revoke_unused_threshold_millis2 $threshold

Recursos adicionales

Paral obtener inel formación adicional sobre todo permisos, pregunta los siguientera artículos:

Paral descubrva cómo solicitar permisos, descarga las siguientser apps del ejemplo:


Categorías: Trucos y Guía