Как загрузить файлы в локальную папку загрузок? - PullRequest
0 голосов
/ 17 сентября 2018

Я включил параметры загрузки файлов с помощью WebView. Я сохраняю файлы с помощью DownloadManager. Но файлы не появляются в локальном каталоге загрузок. Файлы, которые я скачал, сохраняются здесь.

> file/storage/emulated/0/Android/data/com.myapp/files/x.mp3

Я много пробовал. Но так или иначе это не было загружено в локальной папке загрузок. Что мне делать?

Мой код

String string = String.valueOf((URLUtil.guessFileName(url, contentDisposition, mimeType)));

            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
            request.setMimeType(mimeType);
            String cookies = CookieManager.getInstance().getCookie(url);

            request.addRequestHeader("cookie", cookies);
            request.addRequestHeader("User-Agent", userAgent);
            request.setTitle("test17");
            request.setDescription("Downloading file...");
            request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
            request.allowScanningByMediaScanner();

            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setDestinationInExternalFilesDir(getContext(), DIRECTORY_DOWNLOADS ,  string);
            DownloadManager dm = (DownloadManager)getActivity().getSystemService(DOWNLOAD_SERVICE);
            dm.enqueue(request);

1 Ответ

0 голосов
/ 17 сентября 2018

Согласно документации существует 2 типа внешнего хранилища

  • Публичные файлы: файлы, которые должны быть свободно доступны для других приложений и для пользователя.Когда пользователь удаляет ваше приложение, эти файлы должны оставаться доступными для пользователя.Например, фотографии, снятые вашим приложением или другими загруженными файлами, следует сохранять в виде общедоступных файлов.
  • Личные файлы: файлы, которые по праву принадлежат вашему приложению и будут удалены, когда пользователь удалит ваше приложение.Хотя эти файлы технически доступны пользователю и другим приложениям, поскольку они находятся во внешнем хранилище, они не обеспечивают ценность для пользователя вне вашего приложения.

В вашем кодевызов DownloadManager.Request.setDestinationInExternalFilesDir () эквивалентен вызову Context.getExternalFilesDir(), который получит личный каталог файлов.

Если вы хотите сохранить загруженные файлы в каталог загрузок, используйте DownloadManager.Request.setDestinationInExternalPublicDir ()

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "x.mp3");
// call allowScanningByMediaScanner() to allow media scanner to discover your file
request.allowScanningByMediaScanner();
...