Создание внутреннего каталога приложения

Я пытаюсь создать каталог приложения (внутренний) для хранения некоторых изображений. Я перепробовал много 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 /). Если вы сохраните данные по этому пути и удалите приложение, эти данные не будут потеряны.

Другие вопросы по тегам