Загрузка файла PDF с помощью DownloadManager

Я пытаюсь загрузить файл PDF с сервера.

Внешнее хранилище сохраняется:

static final File fSdcard = new File(Environment.getExternalStorageDirectory().toString(), "VDTEC");

Имя файла:

static final File fManualMult = new File(fSdcard, "ManualMult.pdf");

Идентификатор загрузки

private long lDownloadID;

И URL:

static final String sUrlManualMult = "http://germipasto.com.br/comunicacao/app/MULT/MANUAL%20VD%20TEC%20MULT%20-%20revis%C3%A3o%2001%20-%2002-fev%202018.pdf";

Когда я нажимаю кнопку, вызывается метод beginDownload:

private void beginDownload(){

    /*
    Create a DownloadManager.Request with all the information necessary to start the download
     */

    DownloadManager.Request request=new DownloadManager.Request(Uri.parse(sUrlManualMult))
            .setMimeType("application/pdf")
            .setTitle("Dummy File")// Title of the Download Notification
            .setDescription("Downloading")// Description of the Download Notification
            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)// Visibility of the download Notification
            .setDestinationUri(Uri.fromFile(fManualMult))// Uri of the destination file
            .setRequiresCharging(false)// Set if charging is required to begin the download
            .setAllowedOverMetered(true)// Set if download is allowed on Mobile network
            .setAllowedOverRoaming(true);// Set if download is allowed on roaming network
    request.allowScanningByMediaScanner();
    DownloadManager downloadManager= (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    lDownloadID = downloadManager.enqueue(request);// enqueue puts the download request in the queue.
}

Еще у меня есть вещатель, который показывает тост после завершения загрузки:

private BroadcastReceiver onDownloadComplete = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        //Fetching the download id received with the broadcast
        long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
        //Checking if the received broadcast is for our enqueued download by matching download id
        if (lDownloadID == id) {
            Toast.makeText(DocumentosActivity.this, "Download Completed", Toast.LENGTH_SHORT).show();
        }
    }
};

И зарегистрируем его:

registerReceiver(onDownloadComplete,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

Проблема в: Когда я нажимаю, тост отображается через 1-2 секунды, и загрузка не завершается. Что я делаю неправильно?

PS: Я обнаружил, что при изменении ссылки (например, с использованием http://speedtest.ftp.otenet.gr/files/test10Mb.db напрямую) менеджер загрузок работает. Может быть ошибка с моей ссылкой? Я загрузил файл по ftp, и теперь к нему можно получить доступ через браузер.

Покажите код, который регистрируется для завершения загрузки. Похоже, вы путаете обновление статуса с завершением

Gabe Sechan 17.12.2018 20:43

код, показанный в конце (private BroadcastReceiver onDownloadComplete = new BroadcastReceiver () {), не выполняет эту работу? @GabeSechan

Gilberto Binga 17.12.2018 21:04

Нет. Это создает широковещательный приемник, но не регистрирует его. Все, что нужно сделать, это создать переменную.

Gabe Sechan 17.12.2018 21:04

о, ты прав. вот код: registerReceiver (onDownloadComplete, новый IntentFilter (DownloadManager.ACTION_DOWNLOAD_COMPLETE)); @GabeSechan (добавлю в пост). Прочтите PS, я узнал это сейчас

Gilberto Binga 17.12.2018 21:09
1
4
1 772
0

Другие вопросы по теме

Android Download Manager работает не на всех телефонах
После загрузки диспетчер загрузки документов продолжает показывать всплывающее сообщение "Ошибка загрузки", даже если она была успешной
DownloadManager помещает файл очереди в очередь и продолжает загрузку в Oreo и более поздних версиях
Как избежать поврежденных загрузок через Android DownloadManager?
Download Manger не работает в Android Pie 9.0 NetworkSecurityConfig: конфигурация сетевой безопасности не указана, используется платформа по умолчанию
Диспетчер загрузки возвращает неудачную загрузку на Android 9.0 NetworkSecurityConfig: конфигурация сетевой безопасности не указана, используется платформа по умолчанию
Получение ошибки IllegalArgumentException при использовании библиотеки aFileChooser
Невозможно установить загруженный apk программно
Android: загрузка в веб-просмотре не работает в oreo, она принудительно закрывается на устройствах Oreo
Скачать файл с помощью диспетчера загрузок