DownloadManager sends STATUS_SUCCESSFUL for failed download

Ok, I upload files (images). I want to send a message with a local URI for the image when the download is complete. But 20% of the time I get:

6-01 18:46:39.900: INFO/DownloadManager(412): Initiating request for download 605 06-01 18:46:39.910: WARN/DownloadManager(412): Aborting request for download 605: Trying to resume a download that can't be resumed 06-01 18:46:39.910: INFO/ololo(2826): Okay, I'll broadcast. 06-01 18:46:39.990: WARN/ImageView(2826): Unable to open content: content://downloads/my_downloads/605 java.io.FileNotFoundException: No filename found. at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:145)... 06-01 18:46:39.990: INFO/System.out(2826): resolveUri failed on bad bitmap uri: content://downloads/my_downloads/605 06-01 18:46:39.990: INFO/ololo(2826): content://downloads/my_downloads/605 was set for android.widget.ImageView@408a2cf0 

Here is the code

 Long downloadId = downloadIds.get(this); if(downloadId == intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1)) { DownloadManager.Query query = new DownloadManager.Query(); query.setFilterById(downloadId); Cursor cursor = downloadManager.query(query); if(cursor.moveToFirst()) { switch (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS))) { case DownloadManager.STATUS_SUCCESSFUL : { Log.i("ololo", "Okay, I'll broadcast."); // Broadcasting break; } case DownloadManager.STATUS_FAILED : { Log.i("ololo", "Bad, I won't broadcast."); int reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON)); if(reason == DownloadManager.ERROR_CANNOT_RESUME || reason == DownloadManager.ERROR_UNKNOWN) { // Rerun download } break; } default: break; } } } 
+5
source share
1 answer

DownloadManager is faulty and does not work properly. This error was sent from Google a while ago:

https://code.google.com/p/android/issues/detail?id=18462

To download a single file, you can work around this by specifying a unique directory that will be downloaded specifically for this purpose, and just take everything you get in this directory after DownloadManager.STATUS_SUCCESSFUL.
To download multiple files, I can’t come up with a workaround at the moment if you don’t have the ability to rename files in the source.

+5
source

All Articles