English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Подробное описание доступа к внешним хранилищам в Android 4.4 и пример кода

Android4.4  Доступ к внешнему хранилищу

В системе Android 4.4 внешние карты памяти (SD-карты) называются вторичными внешними устройствами хранения (secondary storage device), приложения не могут записывать данные на внешние устройства хранения (SD-карты), и право WRITE_EXTERNAL_STORAGE предоставляет только право записи на основное внешнее хранилище (primary storage). Для других внешних хранилищ атрибуты файлов изменяются на основе структуры папок, приложения не требуют получения права WRITE_EXTERNAL_STORAGE, но могут управлять папками, связанными с их именем пакета. Например, если имя пакета приложения составляет com.example.externalstorage, то папка Android/data/com.example.externalstorage на внешнем хранилище принадлежит ему, и к ней можно свободно обращаться, не требуя прав. Кроме того, необходимо特别注意, что при удалении приложения соответствующие папки и данные, созданные на SD-карте, будут полностью удалены.

Исключение, в Android 4.4, системные приложения (имеющие подпись platform или предварительно установленные в директории /system/priv-app) могут получить полные права чтения и записи на SD-карту, используя право WRITE_MEDIA_STORAGE.

В Android 4.4 добавлены следующие функции для доступа к внешнему хранилищу:

 Context.getExternalFilesDirs(null), возвращает несколько каталогов данных приложения на SD-картах

/storage/sdcard0/Android/data/<имя_пакета>/files

/storage/sdcard1/Android/data/<имя_пакета>/files

Context.getExternalCacheDirs(), возвращает несколько каталогов кэша для приватной базы данных приложения на SD-картах

/storage/sdcard0/Android/data/<имя_пакета>/caches

/storage/sdcard1/Android/data/<имя_пакета>/caches

Context.getObbDirs(), возвращает несколько sd-каталоговobb с приватными данными (обычно это каталог данных игры)

/storage/sdcard0/Android/obb/<имя_пакета>

/storage/sdcard1/Android/obb/<имя_пакета>

Функция выше позволяет правильно получить путь к SD-карте на моей системе Android 5.1, но на системе Android 4.4 можно видеть только путь к внутреннему хранилищу.

 
   
 

Согласно информации из Интернета, начиная с Android 4.4, можно управлять SD-картой, изменив системные файлы, способ следующий:

1<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
2     <group gid="sdcard_r" />
3     <group gid="sdcard_rw" />
4     <group gid="media_rw" />
5   </permission>

Измените узел android.permission.WRITE_EXTERNAL_STORAGE файла /system/etc/permissions/platform.xml, добавьте <group gid="media_rw" /> (требуется root-права).

После внесения изменений приложение можно свободно управлять SD-картой.

Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!

Рекомендуем для просмотра