2012-06-01 11 views
5

के लिए STATUS_SUCCESSFUL भेजता है ठीक है, मैं फ़ाइलें (छवियां) डाउनलोड कर रहा हूं। जब डाउनलोड पूरा हो जाता है तो मैं छवि के लिए स्थानीय यूआरआई के साथ एक संदेश भेजना चाहता हूं। लेकिन समय के 20% मैं इस हो रही है:डाउनलोड मैनेजर असफल डाउनलोड

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 समस्या केवल सैमसंग उपकरणों (गैलेक्सी टैब 10.1 या कुछ और, 3.2, या 2.3.3, या 4.0 पर हो रही है - इससे कोई फर्क नहीं पड़ता, किसी भी एचटीसी के साथ कभी नहीं हुआ)। मुझे लगता है कि 'DownloadManager' का अपना _buggy_ प्राप्ति है। तो मेरी टीम के नेता ने अपना खुद का अहसास लिखा और यह अच्छी तरह से काम करता है। – efpies

+0

बहुत खराब है, मुझे इसे सैमसंग टैबलेट P7510 और P5110 (गैलेक्सी टैब 10.1 वन और TWO) में उपयोग करने की आवश्यकता है, और मुझे आपके द्वारा वर्णित विशिष्ट ओएस संस्करणों पर काम करने की आवश्यकता है .. इसलिए मुझे लगता है कि मुझे अपना खुद का कामकाज लागू करना है। –

उत्तर

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 ईटैग का उपयोग करने से शायद इस समस्या का समाधान होगा। हालांकि, HTTP ईटीएजी का उपयोग HTTP स्पेक में वैकल्पिक है, और इसलिए, इस समस्या को हल करने के लिए ईटैग का उपयोग करके ईटैग समर्थन जोड़ने के लिए वेब सर्वर पर प्रत्यक्ष व्यवस्थापक पहुंच होने पर निर्भर करता है। मैं अभी भी दावा करता हूं कि DownloadManager छोटी है क्योंकि यह ईटैग समर्थन के बिना काम करने में विफल रहता है। – Phileo99

+0

मुझे थोड़ी सी समस्या का सामना करना पड़ रहा है ... डाउनलोड चलाने के लिए STATUS_FAILED प्राप्त कर रहा है ... क्या कोई विचार है? – CoDe

संबंधित मुद्दे