Подтвердить что ты не робот

Должен ли я объявлять как 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 опускает эту важную информацию.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Вот какой вывод от aapt для 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'