¿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?

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 6.0 Marsmallow BLE: Parámetros de conexión
  • Mensaje incorrecto con el permiso GET_ACCOUNTS
  • TextView.getSelectionEnd () devolver el valor del índice de inicio en dispositivos Samsung Marshmallow 6.0
  • Crash casting AndroidKeyStoreRSAPrivateKey a RSAPrivateKey
  • Descartar diálogo de solicitud de permiso en Marshmallow utilizando el botón Atrás
  • ¿Cómo enviar un GCM de alta prioridad?
  • Obtener la ubicación actual 0 en marshmallow donde por debajo de 23 API su ubicación exacta actual utilizando ubicación fusionada
  • Android Marshmallow, nivel de protección "peligroso" y componentes / aplicaciones del sistema
  • No se muestra el diálogo de permiso de Android M
  • Servicios de Android Play FusedLocatioAPI getLastLocation se bloquea con SecurityException
  • ¿Cómo usar el cliente Apache HTTP heredado en Android Marshmallow?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.