DownloadManager не работает через 10 минут - PullRequest
0 голосов
/ 19 февраля 2019

Я сейчас пытаюсь загрузить видео с моего веб-сервиса (WebApi 2.0 HttpGet method).

Этот файл может занять некоторое время для загрузки (до 20 минут или более).

Для загрузки я использую нативный DownloadManager, и он отлично работает для небольших (и быстрых) файлов.

Если процесс загрузки занимает более 10 минут, на 10-й загрузка останавливается со статусом DOWNLOAD_FAILED.

Сначала я подумал, что это проблема моей конфигурации IIS / WebApi, но если я загружаю файл с помощью chrome (или любого другого браузера), он завершается успешно, даже если для этого требуется 20 или более минут, поэтому он долженбыть проблемой на стороне клиента.

Я инициализирую DownloadManager obj в onCreate:

downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

Это мой DownloadManager Код:

private void downloadVideo(final int position) {
    progressDialogLayout.setVisibility(View.VISIBLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

    downloadingVideoId = adapter.getItem(position).getId();
    Uri downloadUri = Uri.parse("MyURL");

    DownloadManager.Request request = new DownloadManager.Request(downloadUri);
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
    request.setAllowedOverRoaming(false);
    request.setTitle(Objects.requireNonNull(adapter.getItem(position)).getDeadFullName());
    request.setDescription("Download in corso...");
    request.setVisibleInDownloadsUi(true);
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MOVIES, "/" + adapter.getItem(position).getId() + ".mp4");

    refid = downloadManager.enqueue(request);

    new Thread(new Runnable() {
        @Override
        public void run() {
            boolean downloading = true;
            while (downloading) {
                if (refid == null)
                    return;
                DownloadManager.Query q = new DownloadManager.Query();
                q.setFilterById(refid);
                Cursor cursor = downloadManager.query(q);
                cursor.moveToFirst();
                int bytes_downloaded = cursor.getInt(cursor
                  .getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
                int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));

                if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
                    downloading = false;
                }

                final double dl_progress = (int) ((bytes_downloaded * 100L) / (bytes_total == 0 ? 1 : bytes_total));

                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        pbDialogProgress.setProgress((int) dl_progress);
                        tvDialogProgressPercentage.setText(String.format(Locale.getDefault(), "%d%%", (int) dl_progress));
                    }
                });

                Log.d("DOWNLOAD", DownloadManagerUtils.StatusMessage(cursor)); //it just parses the status into a readable string
                cursor.close();
            }

        }
    }).start();
}

Тем не менее, почему мой менеджер загрузок останавливается ровно через 10 минут?Конфигурация тайм-аута отсутствует, поэтому я не могу понять, что не так.

Спасибо

...