2012-06-01 37 views
5

好吧,我正在下載文件(圖片)。我想在下載完成時發送帶有圖像本地URI的消息。但是,20%的時間我得到這個:DownloadManager發送STATUS_SUCCESSFUL失敗的下載

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 [email protected] 

下面是代碼

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; 
     } 
    } 
} 
+0

嗨,我有同樣的問題。你有沒有解決它或明白什麼是錯的? –

+0

@TalKanel問題只發生在三星設備上(Galaxy Tab 10.1或其他,在3.2或2.3.3或4.0上 - 這並不重要,從未發生過任何HTC)。我認爲他們自己的_buggy_實現了'DownloadManager'。所以我的團隊領導寫下了自己的想法,並且效果很好。 – efpies

+0

太糟糕了,我需要在三星平板電腦P7510和P5110(GALAXY TAB 10.1 ONE和TWO)中使用它,我需要它在您提到的特定操作系統版本上工作..所以我想我必須實施我自己的解決方法。 。 –

回答

5

下載管理器是越野車和工作不正常。此bug已與谷歌提起了一段時間後:

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

對於單個文件下載,你可以通過指定一個唯一的目錄解決此下載到專門爲此,只是採取任何你在那個目錄中獲取在DownloadManager.STATUS_SUCCESSFUL上。
對於多文件下載,目前我無法想到解決方法,除非您有能力重新命名源文件。

+0

我認爲這將適用於您的情況:http://papaya-backend.net/2013/04/12/why-http-etag-header-may-cause-your-downloading-apps-on-android-failed/ – CoDe

+0

是的,使用HTTP ETags可能會解決此問題。但是,在HTTP規範中使用HTTP ETags是可選的,因此,使用ETags解決這個問題取決於直接管理員訪問Web服務器以添加ETags支持。我仍然聲稱DownloadManager有問題,因爲它沒有ETag支持就無法工作。 – Phileo99

+0

我面臨着類似的問題...得到STATUS_FAILED運行下載...有什麼想法爲什麼? – CoDe