Android 4.4: ¿es válido el permiso WRITE_EXTERNAL_STORAGE en el almacenamiento externo primario / mnt / sdcard?

Android 4.4 nuevas reglas para acceder al almacenamiento externo parecen romper muchas aplicaciones.

De acuerdo con esto: http://source.android.com/devices/tech/storage/ (lea atentamente) parece que el permiso WRITE_EXTERNAL_STORAGE no concede más acceso a almacenamiento extraíble secundario con la ruta / mnt / external_sd en Android 4.4. Dicen que las aplicaciones sólo pueden acceder a una carpeta privada en el almacenamiento secundario extraíble, y se quita cuando se quita la aplicación.

Ahora, creo que, según lo implícito, WRITE_EXTERNAL_STORAGE concederá acceso en el almacenamiento externo primario / mnt / sdcard.

Si es cierto, es posible, por ejemplo, que mi aplicación inicie otra aplicación y la alimente con un archivo: // url dentro del almacenamiento externo principal y luego la aplicación llamada puede editar y guardar el archivo en la misma ruta, siempre Tiene el permiso WRITE_EXTERNAL_STORAGE.

¿Funciona Android 4.4 de esta manera en cuanto al acceso de almacenamiento externo primario?

Tienes razón, pero para ver por qué vamos a echar un vistazo a los detalles de los diferentes tipos de almacenamiento externo y su sistema de permisos.

Almacenamiento externo primario

En el modelo de almacenamiento externo de KitKat, cada aplicación tiene acceso a un directorio personal especial en el almacenamiento externo primario. Las aplicaciones siempre pueden leer y escribir el contenido de esos directorios externos sin necesidad de un permiso especial. Sin embargo, en contraste con los directorios internos de la aplicación, los externos también pueden ser accedidos por otras aplicaciones en determinadas circunstancias. READ_EXTERNAL_STORAGE proporciona a las aplicaciones acceso de lectura completo a la memoria externa primaria, incluso para todas las direcciones domésticas. Sin embargo, WRITE_EXTERNAL_STORAGE otorga permiso de escritura y lectura para el almacenamiento externo primario. Ahora vamos a aks, ¿por qué tener una dirección de inicio si alguien que tiene los permisos anteriores puede manipularlos? La razón es que esos nuevos dirs caseros externos no se significan como frontera de la seguridad. Lo que los hace especiales es que Android los eliminará automáticamente tan pronto como se desinstale la aplicación propietaria, por lo que hemos automatizado la limpieza aquí. Esto también significa que no debe almacenar los datos privados de la aplicación como credenciales o cosas explotables como archivos de configuración en la memoria externa en absoluto. También es bueno que el escáner de los medios de comunicación ignora los dirs caseros. También tenga en cuenta que esta parte de la memoria se puede montar en un equipo donde Android efectivamente pierde el control sobre los datos.

Almacenamiento externo secundario

Aquí, el concepto de los dirs externos del hogar aparece de nuevo donde las aplicaciones pueden almacenar sus datos sin requerir un permiso. Una vez más, los dirs especiales se eliminan automáticamente tras la desinstalación de la aplicación propietaria y no proporcionan ninguna seguridad porque la tarjeta sd se puede montar y modificar arbitrariamente en un equipo, por ejemplo. Pero, en contraste con el almacenamiento externo primario, todos los datos fuera de los directorios locales se leen sólo aquí. Por lo tanto, realmente no hay permiso para el acceso de escritura, porque esto no está destinado en absoluto.

Su ejemplo Con su ejemplo, tiene toda la razón en que la aplicación iniciada a la que se le dio un archivo URI puede modificarlo arbitrariamente, dado que tiene el permiso correcto.

Si está interesado en más detalles, los mensajes aquí y aquí proporcionan una excelente visión del nuevo modelo de almacenamiento.

  • No puedo obtener la ruta real de la tarjeta SD extraíble. ¿Hay alguna manera de conseguir?
  • Cordova: No se puede construir el proyecto con corodva-plugin-calendar
  • Android 6.0 necesita reiniciar después de conceder permiso de usuario en tiempo de ejecución
  • No se encuentra Symbol Manifest.permission.WRITE_EXTERNAL_STORAGE en la v23
  • No se puede contestar llamadas entrantes en android marshmallow 6.0
  • Ya que Android 6.0 escuchando los cambios de PhoneStateListener.LISTEN_DATA_CONNECTION_STATE parece que ya no necesita permiso de READ_PHONE_STATE
  • ¿Por qué mi aplicación dice que estoy solicitando permiso para contactos?
  • Excepción de lectura Wifi / 3G Estado
  • Archivos de expansión en Android 6
  • Android: write failed: EPIPE (Broken pipe) Error al escribir el archivo
  • Error básico en AndroidManifest.xml para recibir permiso de SMS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.