2012-02-08 20 views
11

मैं एंड्रॉयड DownloadManager वर्ग के साथ SDCard करने के लिए एक फ़ाइल डाउनलोड करना चाहते:एंड्रॉइड डाउनलोड मैनेजर का उपयोग कैसे करें?

Request request = new Request(Uri.parse(url)); 
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); //set destination dir 
long downloadId = downloader.enqueue(request); 

लेकिन मैं हमेशा डाउनलोड की स्थिति = 16 (STATUS_FAILED) मिलता है, और कारण = 1008 (ERROR_CANNOT_RESUME)। मैंने पहले से ही एंड्रॉइड.permission.WRITE_EXTERNAL_STORAGE को मैनिफेस्ट में शामिल कर लिया है।

जब मैं बाहर

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); 

टिप्पणी की है और डिफ़ॉल्ट डाउनलोड फ़ोल्डर का उपयोग करें, यह ठीक है।

content://downloads/my_downloads/95 

मैं SDCard करने के लिए फाइल कॉपी करने के लिए कैसे पता नहीं है: लेकिन मैं कहाँ फ़ाइल चला जाता है पता नहीं है, localUri मैं परिणाम से प्राप्त की तरह कुछ है।

मुझे जो चाहिए वह एसडीकार्ड पर एक फ़ाइल डाउनलोड करना है। क्या कोई मदद कर सकता है? धन्यवाद!

उत्तर

13

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() मुझे /mnt/sdcard/downloads

देता है और मैं आप इस तरह localUri से फ़ाइल पथ प्राप्त कर सकते हैं onReceive (ACTION_DOWNLOAD_COMPLETE)

long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); 
Query query = new Query(); 
query.setFilterById(downloadId); 
Cursor cur = dm.query(query); 

if (cur.moveToFirst()) { 
    int columnIndex = cur.getColumnIndex(DownloadManager.COLUMN_STATUS); 
    if (DownloadManager.STATUS_SUCCESSFUL == cur.getInt(columnIndex)) { 
     String uriString = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 

     File mFile = new File(Uri.parse(uriString).getPath()); 
     .... 

    } else { 
     Toast.makeText(c, R.string.fail, Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

मैं केवल मिल "सामग्री: // डाउनलोड/my_downloads/539" इस कोड के साथ और कोई स्थानीय पथ नहीं है। – Radon8472

+2

एंड्रॉइड संस्करण के आधार पर आपको या तो फ़ाइल मिलती है: // वापस (एंड्रॉइड <4.2) या एक सामग्री: // (एंड्रॉइड 4.2 और ऊपर)। इसलिए यह उत्तर केवल एंड्रॉइड निचला 4.2 और 4.2 पर लागू होता है और सामग्री को न्यूनतम द्वारा नीचे दिए गए उत्तर के साथ हल करने की आवश्यकता होगी। –

15

में डाउनलोड की गई फ़ाइल उपयोग करने में सक्षम हूँ:

public static String getFilePathFromUri(Context c, Uri uri) { 
    String filePath = null; 
    if ("content".equals(uri.getScheme())) { 
     String[] filePathColumn = { MediaColumns.DATA }; 
     ContentResolver contentResolver = c.getContentResolver(); 

     Cursor cursor = contentResolver.query(uri, filePathColumn, null, 
       null, null); 

     cursor.moveToFirst(); 

     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     filePath = cursor.getString(columnIndex); 
     cursor.close(); 
    } else if ("file".equals(uri.getScheme())) { 
     filePath = new File(uri.getPath()).getAbsolutePath(); 
    } 
    return filePath; 
} 
+0

आपको बहुत धन्यवाद, डाउनलोड मैनेजर – xDragonZ

+0

के साथ पूरी तरह से काम करना यह 6.0.1 - कुडोस पर बहुत अच्छा काम करता है! – runfaj

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