English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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-картой.
Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!