как загружать и сохранять медиафайлы во внутреннюю память android java

Я хочу загрузить несколько аудиофайлов из Интернета. Я хочу использовать менеджер загрузок для загрузки этого файла, но я не знаю, как сохранить эти файлы в определенном внутреннем хранилище в Android. InternalStorage/folder/filename.mp3 (чтобы я мог легко получить к ним доступ).

manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                Uri uri = Uri.parse("URL");
                DownloadManager.Request request = new DownloadManager.Request(uri);
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
                long reference = manager.enqueue(request);

Это полезно для загрузки. Но мы не можем указать место для этих файлов.

Итак, как указать, чтобы эти файлы сохранялись во внутреннем хранилище в определенном месте. А также, как access и delete эти файлы.

Пожалуйста, не посвящайте этот вопрос, так как я запутался, просматривая много статей.

если есть другая лучшая альтернатива или любое предложение, прокомментируйте


person Sachin Burdak    schedule 10.06.2021    source источник
comment
Конечно вы можете. Лучше посмотрите на функции request.setDestination....   -  person blackapps    schedule 10.06.2021


Ответы (2)


Проверьте функции request.setDestination здесь, чтобы сохранить файл во внешнем приложении. Конкретный каталог [пример: внешний/Android/data/your_app_name/filePath_you_set_in_function»], используйте, как показано ниже:

DownloadManager.Request request = new DownloadManager.Request(uri);
request.setDescription("Selected Video is being downloaded");
request.allowScanningByMediaScanner();
request.setTitle("Downloading Video");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
//Set the local destination for the downloaded file to a path within the application's external files directory
request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, fileName); //To Store file in External Public Directory use "setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName)"
DownloadManager manager = (DownloadManager)
mContext.getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);

И если вы хотите загрузить его в другое место, вам нужно переместить его после завершения загрузки с помощью потоков ввода-вывода. Вы можете использовать широковещательный приемник для выполнения этой задачи после того, как DownloadManager завершит загрузку. Вы можете использовать FileProvider, чтобы открыть файл в другом приложении в Android версии 10 или выше.

person Akki    schedule 10.06.2021
comment
Путь не является общедоступным каталогом, так что не пойдет. И они не являются обратными вызовами. - person blackapps; 10.06.2021
comment
Извините, но ваше обновление делает его еще хуже, предоставляя полный parh. И устаревший запрос разрешения не нужен. Никогда. - person blackapps; 10.06.2021
comment
@blackapps, у меня это хорошо работает. Поделитесь другим вариантом, если он у вас есть. - person Akki; 10.06.2021
comment
@Akki, но как получить и удалить этот конкретный файл. (Я использую request.setDestinationInExternalFilesDir) - person Sachin Burdak; 11.06.2021
comment
@SachinBurdak, Вы уже ответили!. да, чтобы получить конкретный файл, используйте context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), fileName) - person Akki; 11.06.2021

просто добавьте эту строку, чтобы сохранить файл:

request.setDestinationInExternalFilesDir(context,Environment.DIRECTORY_ALARM,mp3name);  

удалить этот файл

File file = new 
File(context.getExternalFilesDir(Environment.DIRECTORY_ALARMS),"Fav_Ringtone.mp3");

file.delete();

прочитать этот файл

File file= newFile(context.getExternalFilesDir(Environment.DIRECTORY_ALARMS),"Fav_Ringtone.mp3");
person Sachin Burdak    schedule 11.06.2021