Как меняется доступ к хранилищу в Android 6?

Фон

В Android было много изменений относительно того, как обращаться с SD-картой и хранилищем в целом:

API 3 - вы получаете полный доступ, разрешение не требуетсяAPI 4-15 - вам нужно использовать WRITE_EXTERNAL_STORAGE, и вы получите полный доступ.API 16-18 - если вы хотите только читать, используйте READ_EXTERNAL_STORAGEAPI 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 6 с SD-картой, и поскольку сам эмулятор на самом деле не имеет возможности использовать SD-карту, все еще невозможно узнать, что происходит.

Вопросы

Получит ли SD-карта доступ, используя File-API вместо DocumentFile?

Если я хочу получить доступ ко всем внешним путям хранения (включая SD-карту), означает ли это, что мне нужно запрашивать эти разрешения дважды: один для основного внешнего хранилища и один для SD-карты?

Доступны ли какие-либо файлы на SD-карте до предоставления разрешения вручную?

Предположим, что пользователь решил использовать «Приемлемые устройства хранения», что это означает для различных функций, которые получают пути к файлам приложения? Например: getFilesDir, getExternalFilesDir, ...? Изменится ли из-за этого одер getExternalFilesDirs?

Что происходит с файлами приложения, когда пользователь перемещает приложение с / на SD-карту (используя «Приемлемые устройства хранения»)? А как насчет файлов приложения на SD-карте? Останутся ли они? Или они куда-нибудь переедут?

Например, если в приложении есть файл «file1.txt» на SD-карте, по пути «/ storage / extSdCard / Android / data / appPackageName» и файл «file2.txt» (или даже с тем же именем) на основном внешнем хранилище по пути "/ storage / emulated / 0 / Android / data / appPackageName". Что произойдет с этими файлами после переключения? Как бы они слились в одну папку, если вообще?

При перемещении приложения на SD-карту (с использованием «Приемлемых устройств хранения») это означает, что внутреннее хранилище не будет использоваться?

Ответы на вопрос(2)

Ваш ответ на вопрос