Parecería que Google tiene un error en su código AOSP que se introdujo en Android 3.2, que afecta la forma en que el sistema operativo maneja el almacenamiento USB y puede impedir el acceso de escritura a tarjetas SD y memorias USB. Desarrollador reconocido de XDA Elite, moderador sénior y Redactor de noticiasFuego en cadena resume la cuestión en su entrada en el blog:
En el pasado, una aplicación solicitaba el "ESCRIBIR_ALMACENAMIENTO_EXTERNO"permiso, que otorgaría acceso de escritura a todo almacenamientos externos (usuario/grupo "sdcard_rw"). Aparentemente, esto se ha cambiado para otorgar solo acceso de escritura al primario almacenamiento externo. Se ha introducido un segundo permiso llamado "ESCRIBIR_MEDIA_STORAGE", lo que otorgaría acceso a otros almacenamientos externos (usuario/grupo "medios_rw").
El problema es que en realidad no se concederá este permiso a un tercero, normalmente sólo se concederá este permiso a las aplicaciones del sistema y a las proporcionadas por el fabricante del dispositivo. Hay excepciones, aparentemente en algunos dispositivos a las aplicaciones de terceros se les otorgará este permiso, pero según las fuentes de AOSP, ciertamente no se supone que así sea.
Mientras Chainfire investigaba el problema, encontró un código en el /system/vold/Volume.cpp que expresamente establece:
si (almacenamiento primario) {
// Caso especial el tarjeta SD primaria.
// Para ello otorgamos acceso de escritura al grupo SDCARD_RW.
gid = AID_SDCARD_RW;
} demás {
// Para el almacenamiento externo secundario mantenemos las cosas bajo llave.
gid = AID_MEDIA_RW;
}
En muchos dispositivos, la memoria flash interna se considera la "tarjeta SD principal". El real La tarjeta SD se convierte entonces en el almacenamiento externo secundario y queda bloqueada y protegida por lo inalcanzable "ESCRIBIR_MEDIA_STORAGE" permiso.
Chainfire presentó su pregunta al Horario de oficina para desarrolladores de Android equipo, y terminaron discutiéndolo en su reunión en vivo el 11 de abril. Desafortunadamente, los ingenieros de Google presentes en el Hangout no pudieron proporcionar ninguna respuesta real, ya que se trata de un tema complicado y la pregunta solo se planteó una hora antes de que comenzara el programa. Sin embargo, han prometido llegar al fondo de este problema y volver a Chainfire (y a nosotros) más adelante.
También según Chainfire, el problema también está presente en las versiones ICS para el SGS2, aunque Samsung "Lo solucioné usando un truco de permisos muy feo.":
Lo que ves aquí es Samsung. a cuestas el permiso WRITE_MEDIA_STORAGE al permiso WRITE_EXTERNAL_STORAGE, para que las aplicaciones no experimenten el problema descrito.
Queda por ver si Google pretendía o no que las tarjetas SD y memorias USB conectadas se limitaran a ser de solo lectura para aplicaciones de terceros. Sin embargo, da lugar a una idea inquietante: ¿Qué pasaría si el código y las notas que lo acompañan fueran los primeros de Google? etapas de implementar algún tipo de protección contra escritura para el almacenamiento externo y, por lo tanto, limitar aún más nuestro dispositivo móvil ¿libertad? Sólo podemos esperar que se trate de un error genuino, ya que la libertad es una de las razones por las que todos evitamos el Lado oscuro.
[¡Muchísimas gracias a Chainfire por el aviso y la ayuda!]