Есть ли способ хранить данные приложения Android на SD-карте, а не во внутренней памяти? Я знаю, как перенести базу данных приложения sqlite из внутренней памяти на SDCard, но что, если внутренняя память заполняется в первую очередь? Как все это справляются?
Хранение данных приложений Android на SD-карте
Ответ 1
Предупреждение: Этот ответ устарел. Вы должны использовать Environment.getExternalStorageDirectory(), чтобы получить корневой путь к SD-карте, как указано в ответах ниже.
Старый ответ, поэтому комментарии к этому имеют смысл:
Добавляя /sdcard/
к корню, ваш путь должен направить приложение Android для использования SD-карты (по крайней мере, так работает с G1). Объекты файловой системы Android дают вам возможность проверять размеры файлов... поэтому должно быть возможно (если сложно) написать некоторый код отказа. Этот код будет корректировать ваш корневой путь, если внутренняя память заполнена.
Ответ 2
Лучше использовать Environment.getExternalStorageDirectory(), чем для жесткого кода "/sdcard" Он не всегда уверен, что имя папки будет вызвано. Кроме того, класс Environment предлагает метод getExternalStorageState() для проверки доступности внешней памяти.
Ответ 3
Для начала:
В зависимости от модели /os вы можете получить доступ к корневому каталогу sd card с помощью:
File externalStorage = Environment.getExternalStorageDirectory();
Это будет относиться к внутренней памяти sd или внутренней SD-памяти.
externalStorage.getAbsolutePath()
вернет одно из следующих значений
"/sdcard/" или "/mnt/sdcard/"
Чтобы получить доступ к внешней SD-карте или микро SD, которые вы обычно подключаете к внешней стороне телефона/планшета, вы должны использовать одну из следующих папок, которые андроид создает, чтобы указать на внешнюю память:
"/mnt/sdcard/sd"
"/mnt/sdcard/external_sd"
"/sdcard/external_sd"
"/sdcard/sd"
"/mnt/sdcard/"
ps: вы можете заметить пустую папку external_sd
или sd
на внутренней SD-карте
эта папка пуста и используется для указания на внешнюю карту micro sd.
в конце убедитесь, что у вас есть доступ для чтения/записи к SD-карте android.permission.WRITE_EXTERNAL_STORAGE
в манифесте манифеста android.
Наконец, вы должны указать имя файла и готовый
private SQLiteDatabase DB = null;
private static final String DATABASE_NAME = "MyDb.db";
////////////
File sdcard = Environment.getExternalStorageDirectory();
String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + DATABASE_NAME;
DB = SQLiteDatabase.openDatabase(dbfile, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS);
///////////
и ваш готовый к работе...
Ответ 4
Вот еще один аккуратный маленький трюк. Application имеет ряд методов, которые вызываются для получения путей. В частности, приложение имеет метод getDatabasePath с помощью SQLiteOpenHelper, чтобы построить путь. Пользовательский класс приложения может переопределять эти методы для предоставления различных путей, включая пути в getExternalStorageDirectory.
Внешнее хранилище является либо специфичным для приложения, либо общедоступным. Существуют методы, заменяющие механизм getExternalStorageDirectory, getExternalFilesDir() и getExternalStoragePublicDirectory() соответственно.
Ответ 5
какое-либо устройство использует /mnt/sdcard, поскольку root указывает на SD-карту.
Ответ 6
Проблема с использованием SDCard заключается в том, что вы не можете надежно предположить, что он будет присутствовать всегда, когда ваше приложение нуждается в нем. Это не относится к внутренней памяти. Пока ваше приложение не полагается на эти данные для запуска, все должно быть хорошо.