Руководство по хранению файлов на Android
-
09-10-2019 - |
Вопрос
Мне нужно написать приложение для Android, которое загружало бы звуки из Интернета для дальнейшего использования.
Где я должен хранить эти звуки?Является ли Sqlite опцией?И каков наилучший способ загрузить и воспроизвести эти файлы?
Заранее благодарю.
Решение
Я бы порекомендовал поместить файлы на SD-карту, если кто-то существует. Однако одно следует отметить, что вы никогда не должны сложно код на траектории к SD-карте. Вы, скорее всего, захотите что-то сделать в соответствии с линиями:
try {
//Create handle to SD card drectory
exportDirectory = new File(Environment.getExternalStorageDirectory() + "/MyDir");
//Verify export path exists. Create otherwise.
if (exportDirectory.exists() == false) {
if (exportDirectory.mkdirs() == false) {
//Directory structure could not be created.
//Message the user here
return false;
}
}
//Create handle to SD card file.
exportFile = new File(exportDirectory.getAbsolutePath() + "/whatever.mp3");
//Do whatever here
} catch(Exception e) {
//Exception. Message user and bail
return false;
}
Оттуда это простое дело передачи любых данных, которые вы хотите в файл. База данных SQLite, вероятно, будет переполнена для этого приложения, если вы не планируете хранить много дополнительной информации. Также нет никакой гарантии, если вы не храните файлы непосредственно в базу данных как BLOBS, чтобы пользователь не связывался с файловой системой между приложениями. Хотя в случае MP3S и тому подобное, информация о треке / артистке можно сохранить непосредственно в файл через теги ID3 вместо использования базы данных.
Что касается воспроизведения файлов, обратитесь к документации Android на их аудио API. Там есть тонна отличной информации, определенно больше, чем я могу повторить здесь.
Другие советы
Я бы сказал лучшее место для хранения их как отдельные файлы на SDCard под собственной папкой, т. Е. File("/sdcard/com.example.myapp/sound12345.mp3");
Редактировать: пожалуйста, смотрите Ответ Phobos51594 который гораздо более полный, чем мой.
Лучше всего сохранять их непосредственно в файловой системе.Почему вы хотите сохранить его в базе данных?есть ли дополнительная информация, которую вам необходимо сохранить вместе с ним?(Например, названия, описания и т.д.)?Если нет, я бы записал это непосредственно в файловую систему.
В принципе, вы могли бы сохранить его в папке данных вашего приложения (где также хранятся общие настройки и база данных sqlite).Тем не менее, я лично считаю, что этому следует препятствовать, поскольку это уменьшает доступную память в разделе /data (который и так слишком мал на телефонах Android.На большинстве телефонов имеется менее 50 МБ свободного места для передачи данных (это означает:менее 50 МБ для приложений, которые нельзя частично перенести на SD-карту).
Вы всегда должны сохранять такие штрафы на SD-карте, если это возможно, чтобы не слишком сильно сокращать свободное место на разделе данных.Даже с помощью функции A2SD Froyo не все данные установленного приложения перемещаются на SD-карту.Файлы * .dex (которые часто составляют 10-50% от общего размера приложения) по-прежнему остаются в разделе /data.То же самое касается настроек и баз данных sqlite, используемых этими приложениями.Таким образом, даже с A2SD места будет становиться все меньше и меньше по мере установки пользователем большего количества приложений