Должен ли я объявлять как WRITE_EXTERNAL_STORAGE, так и READ_EXTERNAL_STORAGE?

Достаточно ли объявлять <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> или мне также нужно объявить <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ? Javadocs не упоминает эту важную информацию.

Solutions Collecting From Web of "Должен ли я объявлять как WRITE_EXTERNAL_STORAGE, так и READ_EXTERNAL_STORAGE?"

READ_EXTERNAL_STORAGE существует только с Jelly Bean (уровень 16). Согласно документам , все приложения от Jelly Bean имеют это разрешение, даже не объявляя об этом:

Обеспечивает защищенный доступ для чтения к внешнему хранилищу. В Android 4.1 по умолчанию все приложения по-прежнему имеют доступ на чтение. Это будет изменено в будущей версии, чтобы требовать, чтобы приложения явно запрашивали доступ на чтение с использованием этого разрешения. Если ваше приложение уже запрашивает доступ на запись, оно автоматически получит доступ для чтения. Существует новая опция разработчика, чтобы включить ограничение доступа для чтения, чтобы разработчики тестировали свои приложения против того, как Android будет вести себя в будущем.

Таким образом, вы должны объявить об этом для будущей совместимости, но это может быть не источником вашей проблемы, если вы не используете телефон Jelly Bean и не устанавливаете опцию разработчика «Защитить USB-накопитель».

Лучше быть явным и объявлять обе разрешения, но объявляя только android.permission.WRITE_EXTERNAL_STORAGE , автоматически добавляет android.permission.READ_EXTERNAL_STORAGE к вашему APK во время сборки.

Вы можете использовать команду aapt dump badging в APK, чтобы увидеть, что Android считает использование разрешения на запись подразумевающим, что вы также хотите получить разрешение на чтение.

Вот несколько результатов от apapt для APK, где я объявил только WRITE_EXTERNAL_STORAGE в своем манифесте:

 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'