Загрузите PDF-файлы с URL-адреса и сохраните их в определенной папке в Android (java).

#java #android #android-studio #pdf #local-storage

Вопрос:

Я хочу загрузить pdf-файл с заданного URL-адреса и сохранить его в определенной папке. До сих пор я могу загрузить необходимый файл и сохранить его в папке «Загрузки», также я могу создать свой собственный каталог «AldoFiles», но я не могу хранить файлы в пользовательском каталоге.

Это моя попытка:

  private void downloadPdf() {

        try {
            url = new URL(pdfURL);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        {
            requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},RequestCode);
        }

        File direct = new File(Environment.getExternalStorageDirectory()   "/Download/AldoFiles");

        if (!direct.exists()) {
            File pdfDirectory = new File("/sdcard/Download/AldoFiles/");
            pdfDirectory.mkdirs();
        }

        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url   ""));
        request.setTitle(fileName);
        request.setMimeType("application/pdf");
        request.allowScanningByMediaScanner();
        request.setAllowedOverMetered(true);
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,fileName);
        DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        downloadManager.enqueue(request);

    }
 

Комментарии:

1. под пользовательским каталогом вы подразумеваете вне папки загрузки? если да, то проверьте, является ли ваша целевая версия приложения 29 или выше. причина после 29 API (Q) он использует хранилище областей, которое не позволяет приложению напрямую обращаться к общедоступному каталогу. вы можете прочитать об этом, перейдя по следующей ссылке Обзор данных и хранилища файлов

2. `запрос.setDestinationInExternalPublicDir(Среда. DIRECTORY_DOWNLOADS, «Aldofiles/» Имя файла) Не пытайтесь самостоятельно создать этот каталог. Удалите этот код.

3. @blackapps Большое Вам спасибо. Теперь это работает именно так, как я хочу, чтобы это работало.

Ответ №1:

Благодаря @blackapps я решил эту проблему:

 try {
    url = new URL(bookURL);
} catch (MalformedURLException e) {
    e.printStackTrace();
}

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url   ""));
request.setTitle(fileName);
request.setMimeType("application/pdf");
request.allowScanningByMediaScanner();
request.setAllowedOverMetered(true);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "AldoFiles/"   fileName);
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
downloadManager.enqueue(request);