Я сейчас пытаюсь загрузить видео с моего веб-сервиса (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 минут?Конфигурация тайм-аута отсутствует, поэтому я не могу понять, что не так.
Спасибо