Intereting Posts
Могу ли я добавлять теги в приложение в консоль Google Play? Какую библиотеку WebSocket использовать в приложении Android? Как удалить доверенный сертификат CA с установленными приложениями при удалении приложения RuntimeException: ошибка раздувания фрагмента класса Android конвертирует Px в Dp (соотношение сторон видео) Как заполнить прямоугольник с непрозрачностью в android GetWidth () и getHeight возвращают ноль после onMeasure () (определенные устройства) Может ли несколько приложений для Android использовать один процесс и контекст приложения? Приложения libgdx и android. Изображение в качестве фона Осуществляет ли реализация SecureRandom Android истинное случайное число? Возможно ли Bluetooth Bluejacking? Android square viewview Обновить пользовательский интерфейс из потока Стиль Android 4.4 полупрозрачного статуса и стиля навигации на Android 5.0 Android-приложение, которое просто указывает на URL-адрес

Как изменяется доступ к хранилищу на 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-карте