Sé que Android 6.0 tiene nuevos permisos y sé que puedo llamarlos con algo como esto
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, PERMISSION_WRITE_STORAGE);
}
Hoy vi una aplicación de Google que necesita 3 permisos: contactos, sms y cámara. Está haciendo una página 1-3 y los convoca a todos al mismo tiempo para que se activen.
¿Alguien puede decirme cómo puedo llamar a 4 permisos para activar al mismo tiempo como sms, cámara, contactos y almacenamiento?
Ejemplo (olvidé el nombre de la aplicación de google :()
La aplicación necesita sms, contactos y cámara
la aplicación me pidió (e hizo una página de diálogo 1-3) activar sms, activar contactos y luego la cámara. Entonces, esta aplicación de Google estaba llamando a los 3 permisos requeridos juntos y mi pregunta es ¿cómo puedo lograr lo mismo?
Respuestas:
Solo incluya los 4 permisos en la
ActivityCompat.requestPermissions(...)
llamada y Android los ubicará automáticamente como usted mencionó.Tengo un método auxiliar para verificar múltiples permisos y ver si alguno de ellos no está otorgado.
O en Kotlin:
Luego solo envíalo a todos los permisos. Android solo pedirá los que necesita.
fuente
Aquí hay un ejemplo detallado con múltiples solicitudes de permisos:
La aplicación necesita 2 permisos al inicio. SEND_SMS y ACCESS_FINE_LOCATION (ambos se mencionan en manifest.xml).
Estoy usando Support Library v4, que está preparado para manejar Android pre-Marshmallow y, por lo tanto, no es necesario verificar las versiones de compilación.
Tan pronto como se inicia la aplicación, solicita múltiples permisos juntos. Si se otorgan ambos permisos, el flujo normal continúa.
ContextCompat.checkSelfPermission (), ActivityCompat.requestPermissions (), ActivityCompat.shouldShowRequestPermissionRationale () son parte de la biblioteca de soporte.
En caso de que no se otorguen uno o más permisos, ActivityCompat.requestPermissions () solicitará permisos y el control irá al método de devolución de llamada onRequestPermissionsResult ().
Debe verificar el valor del indicador shouldShowRequestPermissionRationale () en el método de devolución de llamada onRequestPermissionsResult ().
Solo hay dos casos: -
Caso 1: -Cada vez que el usuario haga clic en Denegar permisos (incluida la primera vez), se devolverá verdadero. Entonces, cuando el usuario lo niega, podemos mostrar más explicaciones y seguir preguntando nuevamente
Caso 2: -Solo si el usuario selecciona "nunca pregunta de nuevo", devolverá falso. En este caso, podemos continuar con una funcionalidad limitada y guiar al usuario a activar los permisos desde la configuración para obtener más funcionalidades, o podemos finalizar la configuración, si los permisos son triviales para la aplicación.
CASO 1
CASO-2
fuente
Código pequeño:
Lista de permisos de Android permisos normales y permisos peligrosos en API 23
fuente
}
fuente
Es fácil, hazlo de esta manera
En tu onCreate
Luego verifique el resultado
fuente
Mi enfoque se basa en la respuesta de Nicks y espero que sea un poco más utilizable para múltiples (tantos como sea necesario, no solo dos) permisos. Sugiere agregar la clase PermissionsHelper de responsabilidad única:
}
Si el usuario no ha otorgado uno o varios permisos requeridos, se le mostrará el mensaje detallado AlertDialog.
Ejemplo de uso en la actividad:
Espero que esto sea útil para alguien.
fuente
Mi clase de controlador para solicitar múltiples permisos. Puedes consultar el completo usando aquí
fuente
La siguiente metodología trata sobre
Crear una clase "estática" para los métodos de permisos
En MainActivity.java
fuente
Consulte este enlace para comprender completamente el permiso múltiple, también la descarga completa del código fuente, haga clic aquí
fuente
Verificando cada situación
si se deniega, se muestra un cuadro de diálogo de alerta al usuario por qué necesitamos permiso
Comprobación de resultados de permisos
fuente
No hay nada de malo en las respuestas que solicitan permisos múltiples, pero el código de resultado de permisos múltiples no se implementa con mucha elegancia y puede hacer que se compruebe el resultado de permiso incorrecto.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
es una lógica terrible para verificar el resultado de múltiples permisos, no sé por qué Google implementó un código tan terrible.Es un desastre especialmente cuando revisas múltiples permisos. Digamos que usted pide
CAMERA
,ACCESS_FINE_LOCATION
yACCESS_NETWORK_STATE
.Debe verificar,
ACCESS_FINE_LOCATION
pero el usuario solo se otorgaCAMERA
en la primera ejecución y verifica,grantResults[1]
pero en la segunda ejecución seACCESS_FINE_LOCATION
convierte en el permiso con el índice 0. Tengo tantos problemas con el usuario que no otorga todos los permisos a la vez y tengo que escribir una lógica de resultado de permiso tan inútil.Deberías usar
O más simple
en el
onPermissionRequestResult
métodofuente
Después de ver todas las respuestas largas y complejas. Quiero publicar esta respuesta.
RxPermission es una biblioteca ampliamente utilizada ahora para pedir permiso en un código de línea.
agregar en su
build.gradle
¿No es esto fácil?
fuente
He implementado con éxito un código simple para permisos múltiples a la vez. Siga los pasos a continuación 1: Haga la clase Utility.java como se muestra a continuación
2: ahora llama
en su Activity onCreate () o de acuerdo con su lógica.
3: Ahora verifique el permiso antes de realizar la operación para una tarea en particular
4: Ahora implemente el método onRequestPermissionsResult () en su Actividad como se muestra a continuación
fuente
Corto y dulce :). en lo que creo
fuente
fuente
Puedes usar Dexter
En
build.gradle
agregar:Y úsalo en tu actividad como:
fuente
Encontré que esto está en el ejemplo de permisos de tiempo de ejecución del github de Google.
fuente
Consulte la sección "Solicitar múltiples permisos a la vez" en este artículo:
Cosas que debes saber sobre los permisos de Android M
Está muy bien explicado y también puede tocar otros temas relacionados en los que no ha pensado.
fuente
Utilice el ayudante de esta manera (los nombres de los permisos no importan).
}
fuente
Manera simple de pedir permiso múltiple,
https://github.com/sachinvarma/EasyPermission
Cómo agregar :
Cómo pedir permiso:
Para más detalles ->
https://github.com/sachinvarma/EasyPermission/blob/master/app/src/main/java/com/sachinvarma/easypermissionsample/MainActivity.java
Puede ayudar a alguien en el futuro.
fuente
En Kotlin:
fuente
Esto es lo que he hecho en mi actividad. Esperar será útil. Estoy pidiendo permisos de cámara y micrófono.
fuente