Фон
У 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. Это вызвало множество вопросов, поскольку я писал о здесь, здесь и здесь.
Начиная с API 23 (Android 6), похоже, что все снова меняется...
Проблема
Для API 23 есть как минимум 2 вещи, которые новы и связаны с памятью:
- " Удостоверяемые устройства хранения. Пользователь может по желанию сделать SD-карту чем-то вроде первичное внешнее хранилище.
- Как часть нового механизма разрешений (запрашивая разрешения во время выполнения), похоже, что хранилище также разрешение, которое пользователь должен подтвердить. Это для READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE
Так как у Android нет устройства с SD-картой, и поскольку сам эмулятор действительно не имеет возможности использовать SD-карту, все еще невозможно узнать, что происходит.
Вопросы
-
Будет ли SD-карта получить доступ с использованием File-API вместо DocumentFile?
-
Если мне нужен доступ ко всем внешним путям хранения (включая SD-карту), значит ли это, что мне нужно дважды запрашивать эти разрешения: один для основного внешнего хранилища и один для SD-карты?
-
Доступны ли файлы на SD-карте каким-либо образом до предоставления разрешения на использование вручную?
-
Предположим, что пользователь решил использовать "Adoptable Storage Devices" , что это означает для различных функций, которые извлекают пути к файлам приложений? Например: 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" ) означает ли это, что внутреннее хранилище не будет использоваться?