2012-06-01 24 views
5

OK, tôi đang tải xuống tệp (hình ảnh). Tôi muốn gửi một tin nhắn với URI địa phương cho hình ảnh khi tải xuống hoàn tất. Nhưng 20% ​​thời gian tôi nhận được điều này:Tải xuốngManager gửi STATUS_SUCCESSFUL để tải xuống không thành công

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] 

Đây là mã

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

Xin chào, tôi đang gặp sự cố tương tự. bạn đã giải quyết nó bằng cách nào đó hoặc hiểu điều gì sai? –

+0

@TalKanel Vấn đề đang xảy ra chỉ với các thiết bị Samsung (Galaxy Tab 10.1 hoặc cái gì khác, trên 3.2, hoặc 2.3.3, hoặc 4.0 - điều này không quan trọng, không bao giờ xảy ra với bất kỳ HTC). Tôi nghĩ rằng có _buggy_ thực hiện của riêng họ của 'DownloadManager'. Vì vậy, đội trưởng của tôi đã viết nhận thức của riêng mình và nó hoạt động tốt. – efpies

+0

quá tệ, tôi cần sử dụng nó trong máy tính bảng samsung P7510 và P5110 (GALAXY TAB 10.1 ONE và TWO), và tôi cần nó để làm việc trên các phiên bản hệ điều hành cụ thể mà bạn đã đề cập .. vì vậy tôi đoán tôi phải thực hiện giải pháp riêng của mình. –

Trả lời

5

Download Manager là lỗi và không hoạt động đúng. Lỗi này đã được nộp với Google trong một thời gian trở lại:

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

Đối với tập tin tải duy nhất, bạn có thể workaround này bằng cách xác định một thư mục duy nhất để tải về đặc biệt cho mục đích này, và chỉ mất bất cứ điều gì bạn nhận được trong thư mục đó khi DownloadManager.STATUS_SUCCESSFUL.
Để tải xuống nhiều tệp, tôi không thể nghĩ ra cách giải quyết tại thời điểm này, trừ khi bạn có khả năng đổi tên tệp tại nguồn.

+0

tôi nghĩ rằng điều này sẽ làm việc trong trường hợp của bạn: http://papaya-backend.net/2013/04/12/why-http-etag-header-may-cause-your-downloading-apps-on-android-failed/ – CoDe

+0

Có, việc sử dụng thẻ tín dụng HTTP có thể sẽ giải quyết được sự cố này. Tuy nhiên, việc sử dụng thẻ tín dụng HTTP là tùy chọn trong thông số HTTP và do đó, sử dụng ETags để giải quyết vấn đề này phụ thuộc vào việc có quyền truy cập quản trị viên trực tiếp vào máy chủ web để thêm hỗ trợ ETags. Tôi vẫn cho rằng DownloadManager là lỗi vì nó không hoạt động nếu không có hỗ trợ ETags. – Phileo99

+0

Tôi đang gặp phải sự cố tương tự bit ... nhận được STATUS_FAILED để chạy tải xuống ... có bất kỳ ý tưởng nào không? – CoDe

Các vấn đề liên quan