Я пытаюсь загрузить файл 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, и теперь к нему можно получить доступ через браузер.
код, показанный в конце (private BroadcastReceiver onDownloadComplete = new BroadcastReceiver () {), не выполняет эту работу? @GabeSechan
Нет. Это создает широковещательный приемник, но не регистрирует его. Все, что нужно сделать, это создать переменную.
о, ты прав. вот код: registerReceiver (onDownloadComplete, новый IntentFilter (DownloadManager.ACTION_DOWNLOAD_COMPLETE)); @GabeSechan (добавлю в пост). Прочтите PS, я узнал это сейчас
Покажите код, который регистрируется для завершения загрузки. Похоже, вы путаете обновление статуса с завершением