Создание внутреннего каталога приложения
Я пытаюсь создать каталог приложения (внутренний) для хранения некоторых изображений. Я перепробовал много SO-ответов, но все равно ничего не работает. Я попробовал это отсюда.
File mydir = getApplicationContext.getDir("mydir", Context.MODE_PRIVATE); //Creating an internal dir;
Но все же этот каталог не создан - Android/data/com.packagename/...
,
Но когда я запускаю это
File mediaDir = new File("/sdcard/Android/data/com.packagename");
if (!mediaDir.exists()){
mediaDir.mkdir();
}
Это создает каталог во внутренней памяти, но правильный ли это способ?
- И да, я добавил внутренние разрешения на чтение и запись
2 ответа
getApplicationContext().getDir()
не будет создавать папку с именем Android/data/com.packagename/
, Если вы войдете / распечатаете путь для возвращенного файла, вы увидите, что он "/data/data/<packagename>/app_mydir/"
, Так и должно быть для внутреннего хранилища.
Если вы хотите создать каталог на SD-карте (обычно называемый внешним хранилищем, даже если путь / sdcard находится во внутренней флэш-памяти), используйте Context.getExternalFilesDir()
, Это создаст папку как "/sdcard/Android/data/<packagename>/files/"
Внутреннее хранилище:
Чтобы найти места на внутреннем хранилище для вашего приложения, используйте getFilesDir()
позвонил по любому Context
(например, ваш Activity
, чтобы получить File
объект.
Там в getDir
,
http://developer.android.com/reference/android/content/Context.html
Пожалуйста, посмотрите на:
http://developer.android.com/guide/topics/data/data-storage.html
Для ваших целей вместо того, что вы сделали с путем sdCard, вы можете использовать
getExternalFilesDir
http://developer.android.com/reference/android/content/Context.html
Возвращает путь к папке с файлами внутри Android/data/data/your_package/ на вашей SD-карте. Он используется для хранения любых необходимых файлов для вашего приложения (например, изображений, загруженных из Интернета или файлов кэша). После удаления приложения все данные, хранящиеся в этой папке, также исчезают.
Кроме того, начиная с KITKAT, не требуется никаких разрешений для чтения или записи по возвращаемому пути; это всегда доступно для вызывающего приложения. Это относится только к путям, сгенерированным для имени пакета вызывающего приложения. Для доступа к путям, принадлежащим другим пакетам, требуются WRITE_EXTERNAL_STORAGE и / или READ_EXTERNAL_STORAGE.
Можете проверить больше:
http://www.mysamplecode.com/2012/06/android-internal-external-storage.html
http://www.vogella.com/code/ApiDemos/src/com/example/android/apis/content/ExternalStorage.html
Для API 8 и выше это будет нормально работать.
Если вы хотите аналогичную реализацию для API 7 и ниже также,
getExternalStorageDirectory()
Он возвращает корневой путь к вашей SD-карте (например, mnt / sdcard /). Если вы сохраните данные по этому пути и удалите приложение, эти данные не будут потеряны.