Установить пользовательскую папку Android Download Manager
У меня есть вопрос о диспетчере загрузки.
Я собираюсь загрузить файл с сайта. Когда я устанавливаю каталог по умолчанию для загрузки (Environment.DIRECTORY_DOWNLOAD), все работает отлично, и моя загрузка запущена. Но если я попытаюсь изменить каталог, мое приложение не загрузит файл. В частности, я хочу, чтобы мой файл попал в папку внутри Download, например /storage/sdcard/Download/myFolder. Как я могу это исправить?
File mydownload = new File (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+ "/myFolder");
if (!mydownload.exists()){
mydownload.mkdir();
}
String url = sUrl[0];
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
request.setDestinationInExternalPublicDir(mydownload.getAbsolutePath(),"Myfile.extension");
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
Ответы
Ответ 1
проверьте ниже код: сохраните файл в "sdcard/dhaval_files/"
. просто замените имя своей папки и дайте разрешение write_external_storage
в файле манифеста Android.
public void file_download(String uRl) {
File direct = new File(Environment.getExternalStorageDirectory()
+ "/dhaval_files");
if (!direct.exists()) {
direct.mkdirs();
}
DownloadManager mgr = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE);
Uri downloadUri = Uri.parse(uRl);
DownloadManager.Request request = new DownloadManager.Request(
downloadUri);
request.setAllowedNetworkTypes(
DownloadManager.Request.NETWORK_WIFI
| DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(false).setTitle("Demo")
.setDescription("Something useful. No, really.")
.setDestinationInExternalPublicDir("/dhaval_files", "test.jpg");
mgr.enqueue(request);
}
Ответ 2
Доступны два варианта.
1) first setDestinationInExternalPublicDir, это позволит загружать в любую из стандартных каталогов загрузки андроидов на основе типа носителя, например DIRECTORY_DOWNLOADS, DIRECTORY_MUSIC. эти файлы останутся после удаления.
request.setDestinationInExternalPublicDir(DIRECTORY_DOWNLOADS,
File.separator + folderName + File.separator + fileName);
Первый аргумент должен быть стандартным каталогом каталогов, чтобы он работал правильно и не может быть чем-то еще.
2) second-setDestinationInExternalFilesDir это то же самое, что и предыдущий метод с той разницей, что эти файлы будут удалены после удаления приложения.
request.setDestinationInExternalFilesDir(context, DIRECTORY_DOWNLOADS,
File.separator + folderName + File.separator + fileName);
здесь второй аргумент может быть нулевым или любым из каталогов загрузки android.
Ответ 3
Попробуйте код ниже:.
String storagePath = Environment.getExternalStorageDirectory()
.getPath()
+ "/Directory_name/";
//Log.d("Strorgae in view",""+storagePath);
File f = new File(storagePath);
if (!f.exists()) {
f.mkdirs();
}
//storagePath.mkdirs();
String pathname = f.toString();
if (!f.exists()) {
f.mkdirs();
}
// Log.d("Storage ",""+pathname);
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Uri uri = Uri.parse(image);
checkImage(uri.getLastPathSegment());
if (!downloaded) {
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir("/Directory_name", uri.getLastPathSegment());
Long referese = dm.enqueue(request);
Toast.makeText(getApplicationContext(), "Downloading...", Toast.LENGTH_SHORT).show();
}