¿Tengo que declarar tanto ESCRIBIR ALMACENAMIENTO EXTERNO como LEER ALMACENAMIENTO EXTERNO?


Es suficiente para declarar <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> o también tengo que declarar <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />? Los Javadocs omiten esta importante información.

Author: Jeff Axelrod, 2012-08-14

2 answers

READ_EXTERNAL_STORAGE solo existe a partir de Jelly Bean (Nivel 16). De acuerdo con los documentos , todas las aplicaciones a partir de Jelly Bean tienen ese permiso, incluso sin declararlo:

Proporciona acceso de lectura protegido al almacenamiento externo. En Android 4.1 por por defecto todas las aplicaciones todavía tienen acceso de lectura. Esto será cambiado en una versión futura para exigir que las aplicaciones soliciten explícitamente acceso de lectura usando este permiso. Si su solicitud ya solicita acceso de escritura, lo hará obtenga automáticamente acceso de lectura también. Hay una nueva opción de desarrollador para activar la restricción de acceso de lectura, para que los desarrolladores prueben sus aplicaciones contra cómo Android lo hará comportarse en el futuro.

Por lo tanto, debe declararlo para la compatibilidad futura, pero esto podría no ser la fuente de su problema, a menos que esté utilizando un teléfono Jelly Bean y establezca la opción de desarrollador "Proteger almacenamiento USB" opción.

 16
Author: wsanville,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-08 14:30:15

Es mejor ser explícito y declarar ambos permisos, pero declarar solo android.permission.WRITE_EXTERNAL_STORAGE agregará automáticamente android.permission.READ_EXTERNAL_STORAGE a tu APK en el momento de la compilación.

Puedes usar el comando aapt dump badging en un APK para ver que Android considera que el uso del permiso de escritura implica que también quieres permiso de lectura.

Aquí hay una salida de aapt para un APK mío donde declaré solo WRITE_EXTERNAL_STORAGE en mi manifiesto:

uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission:'android.permission.READ_EXTERNAL_STORAGE'
uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE',
  'requested WRITE_EXTERNAL_STORAGE'
 15
Author: Christopher Orr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-07 11:58:46