Google Play показывает неявное разрешение READ_EXTERNAL_STORAGE

Когда в Google I/O был объявлен Android 4.1 JellyBean (API 16), он ввел следующее разрешение:

READ_EXTERNAL_STORAGE

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

http://developer.android.com/about/versions/android-4.1.html#Permissions

У меня есть приложение, которое тегирует API 16 и требует разрешения WRITE_EXTERNAL_STORAGE. Я готов к развертыванию обновления и заметил, что разрешение READ_EXTERNAL_STORAGE теперь указано как необходимое разрешение на портале разработчиков. Он не был указан как требуемое разрешение в Google Play для обновления, развернутого на прошлой неделе. В этом приложении явно не запрашивается разрешение READ_EXTERNAL_STORAGE.

Если пользователям, которые уже предоставили разрешение WRITE_EXTERNAL_STORAGE для этого приложения, будет предложено предоставить дополнительное, неявное READ_EXTERNAL_STORAGE разрешение при обновлении приложения?

Update:

С тех пор мы выпустили приложение, и устройства JellyBean автоматически обновляются без запроса разрешения READ_EXTERNAL_STORAGE. В будущем выпуске, когда я явно объявляю требование для READ_EXTERNAL_STORAGE, будут ли пользователи, которые уже предоставили разрешение WRITE_EXTERNAL_STORAGE, предоставить разрешение READ_EXTERNAL_STORAGE?

Ответ 1

Вам не нужно явно объявлять READ_EXTERNAL_STORAGE, пока у вас есть WRITE_EXTERNAL_STORAGE. Раньше ОС не обеспечивала постоянный доступ к внешнему хранилищу для чтения, который меняется, и вы должны запросить его сейчас. Но если у вас есть доступ на запись, вы неявно получаете доступ к чтению.

Из http://developer.android.com/training/basics/data-storage/files.html

Если вашему приложению необходимо прочитать внешнее хранилище (но не писать ему), вам нужно будет объявить разрешение READ_EXTERNAL_STORAGE...

Однако, если ваше приложение использует разрешение WRITE_EXTERNAL_STORAGE, тогда он неявно имеет разрешение на чтение внешнего хранилища.

Ответ 2

Начиная с API 19 (Android 4.4), вы должны явно указать разрешение READ_EXTERNAL_STORAGE. Да, если у вас есть разрешение WRITE_EXTERNAL_STORAGE, вам будет предоставлено неявное READ_EXTERNAL_STORAGE, но если вам нужен доступ только для чтения к внешнему хранилищу, вы должны указать READ_EXTERNAL_STORAGE.

Prooflink: http://developer.android.com/reference/android/Manifest.permission.html#READ_EXTERNAL_STORAGE