¿Tengo que declarar WRITE_EXTERNAL_STORAGE y READ_EXTERNAL_STORAGE?

¿Es suficiente 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 omitieron esta importante información.

READ_EXTERNAL_STORAGE sólo existe a partir de Jelly Bean (Nivel 16). Según los documentos , todas las solicitudes como de Jelly Bean tienen ese permiso, incluso sin declararlo:

Proporciona acceso de lectura protegido al almacenamiento externo. En Android 4.1 por defecto todas las aplicaciones aún tienen acceso de lectura. Esto se cambiará en una versión futura para requerir que las aplicaciones explícitamente soliciten acceso de lectura utilizando este permiso. Si su aplicación ya solicita acceso de escritura, obtendrá 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 en contra de cómo se comportará Android en el futuro.

Por lo tanto, debe declararlo para compatibilidad futura, pero esto puede no ser el origen 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.

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

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

He aquí algunos resultados de aapt para un APK mío donde declaré sólo 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' 
  • Cómo obtener el historial de uso de datos móviles con NetworkStatsManager
  • Álbum de Facebook y fotos no accesibles con todos los permisos necesarios (GRAPH API)
  • Uso de MediaController en Android 5
  • Algunas preguntas sobre el permiso "USE_CREDENTIALS"
  • Java.io.FileNotFoundException (permiso denegado) Al intentar escribir en el sdcard de Android
  • ¿Cómo dar permisos / dev / bus / usb para aplicaciones libusb android?
  • El permiso ACCESS_COARSE_LOCATION da una precisión de torre celular en Android
  • Permiso del receptor de facturación en la aplicación
  • Limpieza de los permisos de Android no utilizados
  • Android Studio IDE en Mac os: error = 13, Permiso denegado
  • Solicitar permiso para bloquear la actividad y presionar cualquier tecla para cerrar la actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.