Фон
В Android было внесено много изменений в отношении работы с SD-картой и хранилищем в целом:
- API 3 - вы получаете полный доступ, разрешение не требуется
- API 4-15 - вам нужно использовать WRITE_EXTERNAL_STORAGE, и вы получите полный доступ.
- API 16-18 - если вы хотите только читать, используйте READ_EXTERNAL_STORAGE
- API 19-20 - вы не можете читать или писать во вторичное внешнее хранилище (SD-карту), если ваше приложение не является системным или у вас есть root.
- API 21-22 - для доступа к SD-карте необходимо запросить разрешение у пользователя и использовать API DocumentFile вместо File API. Это вызвало много вопросов, поскольку я писал о здесь, здесь и < strong> здесь.
Начиная с API 23 (Android 6), все снова меняется ...
Эта проблема
Для API 23 есть как минимум 2 новые вещи, связанные с хранением:
- "Гибкие устройства хранения «- Пользователь может по желанию сделать SD-карту чем-то вроде основного внешнего хранилища.
- В рамках нового механизма разрешений a > (запрос разрешений во время выполнения), кажется, что хранилище также является разрешением, которое пользователь должен подтвердить. Это для READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE
Поскольку не существует устройства Android 6 с SD-картой, а сам эмулятор действительно не имеет возможности использовать SD-карту, по-прежнему невозможно узнать, что происходит.
Вопросы
Будет ли SD-карта получать доступ через File-API вместо DocumentFile?
Если мне нужен доступ ко всем путям внешнего хранилища (включая SD-карту), означает ли это, что мне нужно дважды запрашивать эти разрешения: один для основного внешнего хранилища и один для SD-карты?
Доступны ли файлы на SD-карте каким-либо образом до ручного предоставления разрешения?
Предположим, пользователь выбрал «адаптируемые устройства хранения», что это означает для различных функций, которые извлекают пути к файлам приложения? Например: getFilesDir, getExternalFilesDir, ...? Изменится ли из-за этого порядок getExternalFilesDirs?
Что происходит с файлами приложения, когда пользователь перемещает приложение с / на SD-карту (с помощью «Adoptable Storage Devices»)? А как насчет файлов приложения на SD-карте? Останутся ли они? Или они переедут куда-нибудь?
Например, если приложение имеет файл «file1.txt» на SD-карте, по пути «/ storage / extSdCard / Android / data / appPackageName», и у него есть файл «file2.txt» (или даже то же имя) на основном внешнем хранилище по пути "/ storage / emulated / 0 / Android / data / appPackageName". Что произойдет с этими файлами после переключения? Как бы они слились в одну папку, если бы вообще?
Означает ли это, что при перемещении приложения на SD-карту (с помощью «Adoptable Storage Devices») внутреннее хранилище не будет использоваться?
getFilesDir()
) переместится в принятое хранилище. Файлы на внешнем хранилище не меняются, если только в документации и моих экспериментах что-то не пропущено. А как насчет файлов приложения на SD-карте? - принятое хранилище переформатируется и превращается в зашифрованный том; все, что на нем, стирается в процессе усыновления. - person CommonsWare   schedule 21.08.2015getFilesDir()
) по-прежнему работают. Они просто указывают на другое место. В этом отношении это похоже на вторичные учетные записи, которые у нас были с Android 4.2. И именно поэтому я стараюсь убедить разработчиков прекратить жесткое программирование. - person CommonsWare   schedule 21.08.2015