Intereting Posts
Android SDK отсутствует, устарел или отсутствует шаблоны. Убедитесь, что вы используете SDK версии 22 или более поздней версии Несовместимые плагины для android-apt после обновления до Android Studio 2.3 Масштабируйте изображение, чтобы заполнить весь ImageView в Android Должен ли полный файл xml содержимого резервной копии быть пустым или вообще не добавлять, чтобы включить все? Гарантирован ли сервис android для вызова onDestroy ()? Сохранять широковещательный приемник после закрытия приложения Профиль Google+, например, прокрутка Установка ширины представления программы Как запустить устройство Genymotion с командой оболочки? Выполнить скрипт оболочки в Gradle DELETE_FAILED_INTERNAL_ERROR Ошибка при установке APK Как я могу получить результаты сканирования Android Wifi в список? Как изменить цвет сенсорного эффекта ActionBar в Android 3.0 и выше Цвет текста элемента меню Android-проект с Robolectric и Gradle (студия Android)

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

Задний план

У 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 вещи, которые новы и связаны с хранением:

  • « Adoptable Storage Devices » – пользователь может по желанию сделать SD-карту чем-то вроде первичного внешнего хранилища.
  • Как часть нового механизма разрешений (запрос разрешений во время выполнения), кажется, что хранилище также является разрешением, которое пользователь должен подтвердить. Это для READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE

Поскольку на нем нет устройства Android 6 с SD-картой, и поскольку сам эмулятор действительно не имеет возможности использовать SD-карту, все равно невозможно узнать, что происходит.

Вопросы

  1. Будет ли SD-карта получать доступ с использованием File-API вместо DocumentFile?

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

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

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

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

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

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

Solutions Collecting From Web of "Как изменяется доступ к хранилищу на Android 6?"

Позвольте мне ответить на связанные вопросы «Удостоверяемые накопители»:

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

Когда пользователь выбирает использовать SD-карту как «Adoptable Storage Device» (формат как внутренний), это означает, что теперь SD-карта доступна только в качестве внутреннего хранилища, т. Е. Нет SD-карты, доступной для хранения загруженных файлов. Изменения путей в путях, возвращаемых связанными методами, не будут. Например: getExternalFilesDir () будет отображать только внешний путь хранения, если пользователь отформатировал свою SD-карту как «Adoptable Storage Devices». Путь к SD-карте будет недоступен.

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

Когда пользователь выбирает свою SD-карту в качестве «Удостоверенных устройств хранения», пользователю необходимо отформатировать SD-карту в качестве внутреннего хранилища, используя опцию «Формат как внутренний» . Формат означает, что все данные / файлы, хранящиеся на SD-карте, будут удалены. Аналогичным образом, когда пользователь хочет удалить свою SD-карту с «Adoptable Storage Devices», пользователю снова нужно отформатировать свою SD-карту в качестве переносного хранилища, используя опцию «Формат как переносная» .

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

Да, исходное внутреннее хранилище не будет использоваться. Будет использоваться только хранилище SD-карт, поскольку после выбора SD-карты в качестве «Adoptable Storage Devices». Все данные / кеш будут сохранены на SD-карте