- SD карта как внутренняя память Android
- Использование карты памяти SD в качестве внутренней памяти
- Как форматировать SD карту памяти как внутреннюю память (пример для Android 9.0)
- Видео инструкция
- Особенности работы карты памяти в качестве внутренней памяти Android
- Форматирование карты памяти для использования в качестве внутреннего хранилища в ADB
- Как вернуть обычное функционирование карты памяти
- Русские Блоги
- Вопрос разрешения записи на внешнюю SD-карту Android
- Затронуто приложение подписи платформы
- DocumentFile адаптационное решение
- 1. Запросить разрешение на запись на внешнюю SD-карту
- 2. Пакет операций с файлами DocumentFile
SD карта как внутренняя память Android
Если ваш телефон или планшет на Android 6.0, 7 Nougat, 8.0 Oreo или 9.0 Pie имеет разъем для подключения карты памяти, то вы можете использовать карту памяти MicroSD в качестве внутренней памяти вашего устройства, такая возможность впервые появилась именно в Android 6.0 Marshmallow.
В этой инструкции — о настройке SD карты как внутренней памяти Android и о том, какие ограничения и особенности при этом имеются. Сначала показан процесс для 7.0, затем — для последней версии Android 9. Учитывайте, что некоторые устройства не поддерживают данной функции, несмотря на нужную версию андроид (Samsung Galaxy, LG, хотя и для них есть возможное решение, которое будет приведено в материале). См. также: Как очистить внутреннюю память на Android телефоне или планшете.
Примечание: при использовании карты памяти таким образом, она не может быть использована в других устройствах — т.е. вынуть и подключить ее через кард-ридер к компьютеру получится (точнее, прочесть данные) только после полного форматирования.
Использование карты памяти SD в качестве внутренней памяти
Прежде чем приступать к настройке, перенесите все важные данные с вашей карты памяти куда-либо: в процессе она будет полностью отформатирована.
Дальнейшие действия будут выглядеть следующим образом (вместо первых двух пунктов можно нажать по «Настроить» в уведомлении о том, что обнаружена новая SD-карта, если вы ее только что установили и такое уведомление отображается):
- Зайдите в Настройки — Хранилище и USB-накопители и нажмите по пункту «SD-карта» (На некоторых устройствах пункт настроек накопителей может находится в разделе «Дополнительно», например, на ZTE).
- В меню (кнопка справа вверху) выберите «Настроить». Если в меню присутствует пункт «Внутренняя память», сразу нажмите по нему и пропустите пункт 3.
- Нажмите «Внутренняя память».
- Прочтите предупреждение о том, что все данные с карты будут удалены, прежде чем ее можно будет использовать в качестве внутренней памяти, нажмите «Очистить и отформатировать».
- Дождитесь окончания процесса форматирования.
- Если по завершении процесса вы увидите сообщение «SD-карта работает медленно», это говорит о том, что вы используете карту памяти Class 4, 6 и подобную — т.е. действительно медленную. Ее можно будет использовать в качестве внутренней памяти, но это отразится на скорости работы вашего Android телефона или планшета (такие карты памяти могут работать до 10 раз медленнее чем обычная внутренняя память). Рекомендуется использовать карты памяти UHS Class 3 (U3) или хотя бы U1, об обычных Class 10 ваш телефон может сообщить, что они недостаточно быстрые.
- После форматирования вам будет предложено перенести данные на новое устройство, выберите «Перенести сейчас» (до переноса процесс не считается завершенным).
- Нажмите «Готово».
- Рекомендуется сразу после окончания форматирования карты как внутренней памяти перезагрузить ваш телефон или планшет — нажмите и удерживайте кнопку питания, затем выберите пункт «Перезагрузить», а если такой отсутствует — «Отключить питание» или «Выключить», а после выключения — снова включите устройство.
На этом процесс завершен: если зайти в параметры «Хранилище и USB накопители», то вы увидите, что место, занятое во внутренней памяти уменьшилось, на карте памяти — увеличилось, а общий объем памяти также увеличился.
Однако, в работе функции использования SD-карты как внутренней памяти в Android 6 и 7 есть некоторые особенности, которые могут сделать использование такой возможности нецелесообразным — об этом соответствующий раздел руководства.
Как форматировать SD карту памяти как внутреннюю память (пример для Android 9.0)
На последней версии Android все действия по превращению карты памяти MicroSD во внутреннюю практически те же самые, но на всякий случай отдельно опишу шаги и приведу снимки экрана (не забудьте, что все данные с карты памяти в процессе будут удалены, позаботьтесь о сохранении важных файлов):
- На вашем смартфоне зайдите в Настройки — Хранилище. А затем нажмите по пункту «SD-карта».
- Нажмите по кнопке меню справа вверху, выберите пункт «Настройки хранилища», а на следующем экране — «Внутренняя память».
- Внимательно прочитайте, что именно произойдет и, если согласны, подтвердите форматирование карты памяти как внутренней памяти. Дождитесь завершения процесса.
- Для переноса данных (тех, которые можно перенести) из внутренней памяти на SD карту памяти, откройте меню в параметрах хранилища и выберите пункт «Перенести данные».
На этом процедура будет завершена. Все особенности работы и способ возврата карты памяти в режим работы в качестве портативного накопителя остаются теми же самыми, что и для предыдущих версий Android.
Видео инструкция
Далее — простое видео, где весь процесс форматирования MicroSD в качестве внутреннего хранилища, а также перенос данных на карту памяти показаны наглядно.
Особенности работы карты памяти в качестве внутренней памяти Android
Можно предположить, что когда к внутренней памяти Android объемом N присоединяется объем карты памяти M, общий доступный объем внутренней памяти должен стать равным N+M. Более того, примерно это отображается и в информации о хранилище устройства, однако по факту все работает несколько иначе:
- Всё, что возможно (за исключением некоторых приложений, системных обновлений) будет помещаться на внутреннюю память, находящуюся на SD-карте, без предоставления выбора. Но внутренняя память продолжить заниматься: не все данные и не все приложения можно разместить на SD карту.
- При подключении Android устройства к компьютеру в данном случае вы будете «видеть» и иметь доступ только к внутренней памяти на карте. То же самое и в файловых менеджерах на самом устройстве (см. Лучшие файловые менеджеры для Android).
Как итог — после того, момента, когда SD карта памяти стала использоваться как внутренняя память, у пользователя нет доступа к «настоящей» внутренней памяти, а если предположить, что собственная внутренняя память устройства была больше чем память MicroSD, то объем доступной внутренней памяти после описываемых действий не увеличится, а уменьшится.
Ещё одна важная особенность — при сбросе телефона, даже в том случае, если вы извлекли карту памяти из него перед сбросом, а также в некоторых других сценариях восстановить данные с неё невозможно, подробнее об этом: Можно ли восстановить данные с SD карты памяти, отформатированной как внутренняя память на Android.
Форматирование карты памяти для использования в качестве внутреннего хранилища в ADB
Для Android устройств, где функция недоступна, например, на Samsung Galaxy S7-S9, Galaxy Note, существует возможность отформатировать SD карту в качестве внутренней памяти с помощью ADB Shell.
Поскольку этот способ потенциально может привести к проблемам с телефоном (и не на любом устройстве может сработать), подробности по установке ADB, включению отладки по USB и запуску командной строки в папке с adb я пропущу (Если вы не знаете, как это делается, то, возможно, лучше не стоит браться. А если возьметесь — то на свой страх и риск).
Сами же необходимые команды будут выглядеть следующим образом (карта памяти должна быть подключена):
- adb shell
- sm list-disks (в результате выполнения этой команды обратите внимание на выданный идентификатор диска вида disk:NNN,NN — он потребуется в следующей команде)
- sm partition disk:NNN,NN private
По завершении форматирования, выйдите из adb shell, а на телефоне, в параметрах хранилища откройте пункт «SD карта», нажмите по кнопке меню справа вверху и нажмите «Перенести данные» (это обязательно, иначе продолжит использоваться внутренняя память телефона). По окончании переноса процесс можно считать завершенным.
Ещё одна возможность для таких устройств, при налчии root-доступа — использование приложения Root Essentials и включение Adoptable Storage в этом приложении (потенциально опасная операция, на свой страх и риск, не выполняйте на старых версиях Android).
Как вернуть обычное функционирование карты памяти
Если вы решите отключить карту памяти от внутренней памяти, сделать это просто — перенесите с нее все важные данные на компьютер, после чего зайдите, также как и в первом способе в настройки SD-карты.
Затем, в меню действий с картой памяти выберите пункт «Портативный носитель» и, следуя указаниям, выполните форматирование карты памяти.
Источник
Русские Блоги
Вопрос разрешения записи на внешнюю SD-карту Android
После недавнего обновления до Android 9.0 я обнаружил, что файловому менеджеру не удалось записать данные на внешнюю SD-карту. File.canWrite() Метод, найденный для возврата false , Обсудив отслеживание и позиционирование, я обнаружил, что это было связано с GoogleизменениеВызванный:
Изменения здесь были удалены WRITE_MEDIA_STORAGE Разрешения, связанные с разрешениями, привели к тому, что внешнее хранилище на SD-карте недоступно для записи.
Затронуто приложение подписи платформы
Эта модификация больше влияет на системные приложения. Для платформ до 9.0 я применил WRITE_MEDIA_STORAGE После разрешения платформы приложение, подписанное платформой, может быть передано java.io.File Интерфейс записан на внешнюю SD-карту. Но после этой модификации, если вы хотите записать на внешнюю SD-карту, вам нужно использовать ее как стороннее приложение. DocumentFile Интерфейс, вы можете прочитать документацию APIСтруктура доступа к хранилищу с участием Использовать доступ к каталогу 。
Порекомендуйте это из Googlebug Приложения платформы, такие как файловый менеджер, камера, галерея и даже MediaProvider, будут иметь внешнюю SD-карту, которую можно только читать и не записывать, то есть проблема сбоя записи, поскольку эти системные приложения не адаптированы. DocumentProvider Способ написания.
DocumentFile адаптационное решение
1. Запросить разрешение на запись на внешнюю SD-карту
Еще в Android 4.4 Android присоединился к структуре доступа к хранилищу. Доступ к внешней SD-карте поддерживается DocumentsUI (com.android.documentsui). После улучшения версии 5.0 и 7.0 в настоящее время существует два вида запросов на внешнюю SD Интерактивный метод разрешения на запись карты:
- До Android 7.0 используйте ACTION_OPEN_DOCUMENT_TREE, чтобы перейти к интерфейсу выбора хранилища DocumentsUI, а затем пользователь вручную открыл внешнее хранилище и выбрал
- Android 7.0 и выше, используйтеStorageVolume.createAccessIntent(null) Перейти к окну приглашения на написание разрешения. (Это окно приглашения также предоставляется DocumentsUI, но оно улучшило предыдущее взаимодействие, чтобы избежать громоздких пользовательских операций)
Проверьте свойства интерфейса разрешений, вы увидите, что окно запроса разрешений на самом деле com.android.documentsui/com.android.documentsui.ScopedAccessActivity
Другими словами, DocumentsUI специально сделал окно запроса разрешения, чтобы упростить процесс запроса разрешения.
ПокаStorageVolume.createAccessIntent(String directoryName) Может передаваться во многих типах медиа, включая музыку, изображения, фильмы, документы и т. Д., Если входящий параметр null , Это означает весь внешний раздел хранения.
Parameters | |
---|---|
directoryName | String : must be one of Environment.DIRECTORY_MUSIC , Environment.DIRECTORY_PODCASTS , Environment.DIRECTORY_RINGTONES , Environment.DIRECTORY_ALARMS , Environment.DIRECTORY_NOTIFICATIONS , Environment.DIRECTORY_PICTURES , Environment.DIRECTORY_MOVIES , Environment.DIRECTORY_DOWNLOADS , Environment.DIRECTORY_DCIM , or Environment.DIRECTORY_DOCUMENTS , or null to request access to the entire volume. |
Returns | |
---|---|
Intent | intent to request access, or null if the requested directory is invalid for that volume. |
Запрос на разрешение и обработка
Запрос разрешения должен быть инициирован в Деятельности или Фрагменте, и в то же время onActivityResult Захвачено в Uri ,Вот этот Uri Это может быть сохранено в локальном хранилище для легкого вызова. Запрошенный код инкапсулируется следующим образом:
Вот rootPath Корневой каталог внешней SD-карты, переданный в контексте, такой как /storage/0000-0000 Такой путь можно пройти context.getExternalFilesDirs(«external») Метод. DocumentsUtils Ниже приведен метод реализации класса инструмента.
среди них DocumentsUtils.checkWritableRootPath() Этот метод используется для проверки, есть ли у корневого каталога SD-карты разрешение на запись, если нет, перейдите к запросу на разрешение; DocumentsUtils.saveTreeUri() Способ сохранить возвращенный Uri Информация хранится локально для последующего запроса.
2. Пакет операций с файлами DocumentFile
Поскольку предыдущее приложение использовалось java.io.File Интерфейс работает с внешними файлами SD-карты, и ожидается минимальное количество изменений кода, тогда наилучшим способом является File Сделайте упаковку снова.
До Android 9.0 системные приложения могут передаваться по умолчанию java.io.File Интерфейс записывается на внешнюю SD-карту, но если это стороннее приложение открытого рынка, оно не может быть записано после 4.4, и некоторые производители настраивают версию Android 9.0. Внешнюю SD-карту также можно записывать напрямую без интерфейса DocumentFile, интерфейса DocumentFile ни java.io.File эффективный.
Поэтому лучше всего сначала проверить, есть ли разрешение на запись в файл, если есть разрешение на запись, напрямую использовать операцию интерфейса «Файл», если нет разрешения, а затем проверить, находится ли файл на внешней SD-карте, если файл находится на SD-карте, используйте операцию интерфейса DocumentFile. ,
Упакованные инструменты DocumentsUtils Описание метода,Не совместимы Указывает, что операция DocumentFile не инкапсулирована:
Источник