¿Se requiere permiso para EXTERNAL_STORAGE en Android M?
¿Los permisos de Android WRITE_EXTERNAL_STORAGE
y READ_EXTERNAL_STORAGE
activarán el nuevo diálogo de permisos de subvención de Android M?
- ¿Es posible utilizar no sólo la barra de estado, sino también la vista de navegación de pie de página para la imagen de fondo
- Llamar el show de DialogFragment () desde dentro onRequestPermissionsResult () provoca IllegalStateException en Marshmallow
- Android: Activar / desactivar WiFi Hotspot mediante programación en Android Marshmallow (6.0)
- Android 6: la aplicación utiliza más memoria cada vez que se inicia
- Problemas de permiso para la ubicación en android Marshmallow applicaton
- Prohibido degradar los dispositivos que utilizaban permisos M anteriormente
- Permisos de Android: ¿quién está usando qué?
- Android Marshmallow 6.0.1 rompió mi reconocimiento de voz continua
- Cómo comprobar la ubicación de Mock en Android Marshmallow?
- ¿Por qué un permiso de GCM no se concede en Android 6?
- Android Studio File Explorer no funciona en Marshmallow (dispositivos Nexus)
- Cómo conservar la huella digital desbloquear después de usar lockNow en Android 6.0?
- Cómo abrir la ventana de permisos de la aplicación en la configuración de la aplicación mediante programación
Estoy de acuerdo con la respuesta de Guillaume Perrot. He encontrado la misma pregunta cuando escribo el permiso de READ_WRITE_EXTERNAL_STORAGE
en AndroidManifest.xml
Sin permisos que aparecen en la aplicación de forma predeterminada, la gente necesita para cambiar el botón de conmutación de almacenamiento en los permisos de la aplicación.Para modificar mi targetSdkVersion
en build.gradle
a menos de 23(MNC)
y otro número relacionado con sdkVersion
, la aplicación Instalado con los permisos en.
La otra manera es escribir requestpermission
función en el lugar que usted necesita la permisson. El código es el siguiente:
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED) { //do the things} else { requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, AnyNumber);
Porque tengo menos de 15 reputación por lo que no puedo votar por la respuesta de Guillaume Perrot. Solo uso de esta manera para mostrar mi idea.
He resuelto agregar esto si comprobar la versión para Android M
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1); }
Mi respuesta se basa en mis pruebas de M Preview SDK versión 2, usando un emulador.
Si segmenta el nivel de API de vista previa de MNC
, WRITE_EXTERNAL_STORAGE
no se concede de forma predeterminada y formará parte de la nueva API de permisos dinámicos.
Verá el permiso de almacenamiento como un botón de conmutación en el nuevo menú de permisos de la aplicación en la configuración del dispositivo y puede usar Activity.requestPermissions
para mostrar la ventana emergente para ese permiso.
Sin embargo, si apuntas a un nivel de api <MNC, no se clasificará como un permiso peligroso y, por lo tanto, se concederá sin que el usuario lo deshabilite (no aparece en la configuración de permisos) y no podrás Compile el código usando Activity.requestPermissions
todos modos como el SDK de vista previa impone minSdkVersion="MNC"
para usar las nuevas API.
Se trata de un comportamiento diferente de los permisos de ubicación: cualquiera que sea el nivel de API que se orienta, el usuario podrá desactivar la ubicación en el menú de permisos.
Para el propio menú de permisos, el estado de activación de permisos está activado por defecto si:
- Nivel de API de destino <MNC.
- Nivel de API de destino = MNC, pero actualiza la aplicación en el dispositivo desde una instalación anterior donde el nivel de API de destino era menor que MNC.
De lo contrario, verá la opción desactivada por defecto.
Espero eso ayude.
Según los documentos:
Permisos limitados concedidos en el momento de la instalación: cuando el usuario instala o actualiza la aplicación, el sistema concede a la aplicación todos los permisos que la aplicación solicita que están bajo PROTECTION_NORMAL.
Así pues, ya que READ_EXTERNAL_STORAGE se encuentra bajo PROTECTION_NORMAL, no activará el diálogo.
Pero dado que el nivel de WRITE_EXTERNAL_STORAGE es PROTECTION_DANGEROUS, caerá bajo este comportamiento como se describe en docs:
Permisos de concesión de usuarios en tiempo de ejecución: cuando la aplicación solicita un permiso, el sistema muestra un diálogo al usuario y, a continuación, llama a la función de devolución de llamada de la aplicación para notificar si se concedió el permiso. Si un usuario concede un permiso, se le dan a la aplicación todos los permisos en el área funcional del permiso que se declararon en el manifiesto de la aplicación
Aquí están las fuentes para el nivel de protección:
lista detallada
De acuerdo con los documentos de Android , no es necesario pedir permiso para leer y escribir almacenamiento externo.
Editar: en la última versión de Android M necesitas pedir permisos de lectura y escritura
El permiso de almacenamiento cae bajo nivel de protección peligroso. Por lo tanto, todos los permisos de nivel de protección peligrosos no se concederán en el momento de la instalación en Android M, si el SDK objetivo de la aplicación está establecido en 23. Se entregarán en tiempo de ejecución. Y sí, estos permisos pueden ser revocados en tiempo de ejecución también.
El cuadro de diálogo No permission no se activará automáticamente; necesitará hacer una solicitud utilizando el método API como requestPermissions () para mostrar ese diálogo nativo.
Compruebe la lista de permisos de nivel peligroso aquí
- Android AlarmManager no funciona en algunos dispositivos cuando la aplicación está cerrada
- Utilizar XML Layout como vista para Subclase de vista?