Actualmente estoy trabajando en una aplicación que requiere varios permisos "peligrosos". Así que intenté agregar "pedir permiso" como se requiere en Android Marshmallow (API Nivel 23), pero no pude encontrar cómo hacerlo.
¿Cómo puedo pedir permiso usando el nuevo modelo de permiso en mi aplicación?
Respuestas:
Abra un cuadro de diálogo con el siguiente código:
Obtenga el resultado de la actividad de la siguiente manera:
Más información: https://developer.android.com/training/permissions/requesting.html
fuente
ActivityCompat.requestPermissions
desuso? (en Nugat)Esta estructura la estoy usando para verificar si mi aplicación tiene permiso y luego solicitarla si no tiene permiso. Entonces, en mi código principal desde donde quiero verificar, escriba lo siguiente:
El módulo checkIfAlreadyhavePermission () se implementa como:
El módulo requestForSpecificPermission () se implementa como:
y anular en actividad:
Consulte este enlace para obtener más detalles: http://revisitingandroid.blogspot.in/2017/01/how-to-check-and-request-for-run-time.html
fuente
checkIfAlreadyhavePermission
areturn result == PackageManager.PERMISSION_GRANTED;
He usado este contenedor (recomendado) escrito por desarrolladores de Google. Es super fácil de usar.
https://github.com/googlesamples/easypermissions
Función que se ocupa de verificar y pedir permiso si es necesario
Feliz codificación :)
fuente
A partir de Android Marshmallow, debemos solicitar al usuario permisos específicos. También podemos verificar el código si el permiso ya está otorgado. Aquí hay una lista de permisos comúnmente necesarios:
Aquí hay un código de muestra para verificar los permisos:
fuente
Mi clase para solicitar permisos de tiempo de ejecución en
Activity
oFragment
También le ayuda a mostrar justificación o abrir Configuración para habilitar el permiso después de que el usuario haya denegado una
Never ask again
opción de permiso (con / sin ) más fácilUsando
Activity
comoCódigo en Github
Manifestación
fuente
Android-M, es decir, API 23 introdujo permisos de tiempo de ejecución para reducir las fallas de seguridad en el dispositivo Android, donde los usuarios ahora pueden administrar directamente los permisos de la aplicación en tiempo de ejecución. Por lo tanto, si el usuario niega un permiso particular de su aplicación, debe obtenerlo solicitando el diálogo de permiso que mencionaste en tu consulta.
Por lo tanto, verifique antes de la acción, es decir, verifique que tenga permiso para acceder al enlace de recursos y si su aplicación no tiene ese permiso en particular, puede solicitar el enlace de permiso y manejar la respuesta de solicitud de permisos como se muestra a continuación.
Entonces, finalmente, es una buena práctica pasar por cambios de comportamiento si planea trabajar con nuevas versiones para evitar el cierre forzado :)
Permisos Mejores prácticas.
Usted puede ir a través de la aplicación oficial de la muestra aquí .
fuente
Desde Android Marshmallow (API 23) y superior, de forma predeterminada, todos los permisos peligrosos (según el documento oficial del documento oficial ) están deshabilitados. Después de la instalación, cuando la aplicación se abre por primera vez, debe otorgar permiso en Tiempo de ejecución.
Logré esto de la siguiente manera:
IN Su clase de actividad:
fuente
Agregue los permisos al AndroidManifest.xml
Para verificar la versión de Android si necesita permiso de tiempo de ejecución o no.
Solicite al usuario que otorgue el permiso si no se le otorga.
Haga algo si el permiso fue otorgado o no.
fuente
Estoy usando esto como una clase de Fragmento base. Solo solicito permisos de un fragmento, pero podría refactorizarlo y crear una versión de Actividad similar.
Hay dos métodos clave que debe usar:
hasPermissionOrWillAsk: utiliza esto para ver si un usuario ha solicitado un permiso y lo niega y no quiere que se le vuelva a pedir. Esto es útil para deshabilitar la interfaz de usuario cuando el usuario ha dado su respuesta final sobre NO querer una función.
runNowOrAskForPermissionsFirst: use esto para ejecutar algún código que requiera permisos. Si el usuario ya ha otorgado permiso, el código se ejecutará de inmediato. De lo contrario, el código se ejecutará más tarde si el usuario concede permiso. O no del todo. Es bueno porque especificas el código en un solo lugar.
Aquí hay un ejemplo:
Feliz de recibir comentarios sobre esto. No es que este ejemplo específico esté un poco simplificado, ya que también debe verificar si los Servicios de ubicación están habilitados en el dispositivo. (Eso es diferente a los permisos). Además, solo admite un permiso a la vez, pero sería fácil de modificar si lo necesita para admitir más de uno a la vez.
fuente
Puede ser una forma más limpia. Agregue todos sus permisos en una matriz como
Cualquiera sea su permiso, cree un método para cada permiso
Llame a este método en onCreate
Ahora anule onRequestPermissionsResult
fuente
Para obtener múltiples permisos a la vez, puede usar esto. Este trabajo para mí. Tengo otra solución. si le das a tu TargetSdkVersion abajo 22, funciona para mí. y su comportamiento es como obtener permiso de manifest.xml. Probado y funciona para mí.
Para más detalles. Compruebe el siguiente enlace
https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
fuente
Para manejar el permiso de tiempo de ejecución, google ha proporcionado un proyecto de biblioteca. Puede verificar esto desde aquí https://github.com/googlesamples/easypermissions
EasyPermissions se instala agregando la siguiente dependencia a su archivo build.gradle:
Para comenzar a usar EasyPermissions, haga que su Actividad (o Fragmento) anule el método onRequestPermissionsResult:
Aquí obtendrá un ejemplo práctico de cómo funciona esta biblioteca https://github.com/milon87/EasyPermission
fuente
Hay una buena biblioteca que se puede usar en caso de que se necesiten permisos cuando un servicio en segundo plano necesita permiso. Aunque una limitación de la biblioteca es que no se puede usar solo para determinar si los permisos se otorgan actualmente a la aplicación o no. Siempre le pregunta al usuario si la aplicación ya no los tiene.
Pruébelo, ya que simplifica la vida: permisos de Android
fuente
Este código a continuación funciona perfectamente. Estoy explicando con la ayuda de un ejemplo.
En mi caso, coloqué las verificaciones de permisos por separado en una clase util y pasé los permisos específicos que necesito verificar de las clases apropiadas. Esto permitió reutilizar el archivo util de verificación de permisos en toda la aplicación.
La siguiente parte del código muestra la llamada a la función. En este caso, solicito
android.Manifest.permission.READ_EXTERNAL_STORAGE
permiso.En el caso anterior, se verifica el permiso si se permite
onAttachPressed();
que se llame a la función; de lo contrario, verificamos el permiso de solicitud.El siguiente es el código presente en la clase util en mi caso
PermissionUtils
Y después de la solicitud, si desea llamar a la función
onRequestPermissionsResult
o, de lo contrario, deberá presionar el botón nuevamente para la llamada a la función.Así que solo llámalo desde
onRequestPermissionsResult
fuente
Uso la biblioteca de la biblioteca RxPermission para pedir permiso. Porque es un código largo que tenemos que escribir para pedir permiso.
Agregue estas dependencias en su
build.gradle
fuente
Prueba esto
Esta es la forma más simple de pedir permiso en la versión Marshmallow.
Nota: - No olvide agregar este mismo permiso en el archivo de manifiesto también
¿ Se otorga o no el código del segundo método para verificar el permiso?
Y anular el método
fuente
Manera simple de pedir permiso evitando escribir mucho código,
https://github.com/sachinvarma/EasyPermission
Cómo agregar :
Cómo pedir permiso:
Esperando que sea útil para alguien.
fuente
Revisé todas las respuestas, pero no satisfizo la respuesta exacta que necesitaba, así que aquí hay un ejemplo que escribí y funciona perfectamente, incluso el usuario hace clic en la casilla de verificación No volver a preguntar .
Cree un método que se llamará cuando desee solicitar un permiso de tiempo de ejecución como
readContacts()
o también puede teneropenCamera()
como se muestra a continuación:Ahora tenemos que hacer
askContactsPermission()
, también puede nombrarloaskCameraPermission()
o cualquier permiso que va a pedir.Antes de escribir esta función, asegúrese de haber definido la siguiente variable de instancia como se muestra:
Ahora paso final para anular el
onRequestPermissionsResult
método como se muestra a continuación:Aquí hemos terminado con los permisos RunTime, el complemento es el
openPermissionSettingDialog()
que simplemente abre la pantalla Configuración si el usuario ha deshabilitado permanentemente el permiso haciendo clic en la casilla de verificación No volver a preguntar . a continuación se muestra el método:¿Qué nos perdimos? 1. Definiendo las cadenas usadas en
strings.xml
Inicializando la
parentLayout
variable dentro delonCreate
métodoparentLayout = findViewById (contenido R.id.);
Definir el permiso requerido en
AndroidManifest.xml
El
queryContacts
método, según su necesidad o el permiso de tiempo de ejecución, puede llamar a su método antes del cualpermission
era necesario. en mi caso, simplemente uso el cargador para buscar el contacto como se muestra a continuación:Esto funciona muy bien codificación feliz :)
fuente
Si está utilizando AndroidX Activity 1.2.0 o AndroidX Fragment 1.3.0 :
Existen nuevas API de resultados de actividad que puede usar para solicitar permisos:
fuente
fuente
Puedes usar mi biblioteca - NoPermission (es solo una clase)
compile 'ru.alexbykov:nopermission:1.1.1'
Muestra
onRequestPermissionResult:
Creo que api es más conveniente que
EasyPermissions
Google.fuente
Permiso de tiempo de ejecución en cualquier lugar de la aplicación Aquí hay un ejemplo
y código de llamada como este:
puedes encontrar más Github
fuente
El permiso de tiempo de ejecución crea una gran cantidad de código repetitivo en la actividad que está fuertemente acoplado. Para reducir el código y facilitar las cosas, puede usar la biblioteca Dexter .
fuente
PERMISO DE TIEMPO EN ANDROID
El método OnClick es verificar el permiso de tiempo de ejecución
y si el permiso está restringido, entonces solicita permiso
fuente