2012-06-01 21 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問題は、Samsungのデバイス(Galaxy Tab 10.1または3.2、または2.3.3、または4.0の何か他のHTCには起こりませんでした)でのみ起こります。私は、 'DownloadManager'の独自の_buggy_実現があると思います。だから私のチームリーダーは自分の実現を書いて、それはうまくいく。 – efpies

+0

あまりにも悪いですが、私はsamsungのタブレットP7510とP5110(GALAXY TAB 10.1 ONEとTWO)で使う必要があり、あなたが言及した特定のOSバージョンで動作する必要があるので、私は自分の回避策を実装しなければならないと思います。 –

答えて

5

DownloadManagerはバグがあると、正しく動作しないコードにあります。このバグは、しばらく前にグーグルに提出された単一のファイルのダウンロードについては

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を使用してこの問題を解決することは、ETagsサポートを追加するためにWebサーバーへの直接管理アクセス権に依存します。 ETagsをサポートしていないと動作しないため、DownloadManagerはバグだと私は依然として主張しています。 – Phileo99

+0

私は少し似たような問題に直面しています... STATUS_FAILEDをダウンロードしています...理由は何ですか? – CoDe

関連する問題