I have an Android app, which does download files for the user like this:
DownloadManager downloadManager; // will be initialized from somewhere else
DownloadManager.Request request = new DownloadManager.Request(resource);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
request.setAllowedOverRoaming(false);
request.setTitle(title);
String downloadDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + subPath;
request.setDestinationInExternalPublicDir(downloadDirectory, fileName);
downloadId = downloadManager.enqueue(request);
In another part of the program, I check the status like this
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(download.getDownloadId());
Cursor c = downloadManager.query(query);
if (c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
int size = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
int downloaded = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
switch (status) {
case DownloadManager.STATUS_PAUSED:
case DownloadManager.STATUS_PENDING:
case DownloadManager.STATUS_RUNNING:
// Do something
break;
case DownloadManager.STATUS_SUCCESSFUL:
// Do something
break;
case DownloadManager.STATUS_FAILED:
int reason = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON));
Log.w(TAG, "Download (" + download.getRemoteID() + ") failed. Reason: " + reason);
}
}
On up to Android 8.0 (API 26) this works fine. But starting with Android 9.0 (API 28), I always get an error code, the download aborts, and the system reports DownloadManager.STATUS_FAILED with the reason ERROR_CANNOT_RESUME which does not help at all.
Do you have any ideas, why I can no longer download files on Android 9.+?