2013-03-21 11 views
5

मैं webService से फ़ाइल डाउनलोड करने के लिए DownloadManager का उपयोग कर रहा हूं। डाउनलोड अंत सफलतापूर्वक समाप्त होता है, लेकिन जब मैं "डाउनलोड" फ़ोल्डर में नई फ़ाइल खोलने का प्रयास करता हूं तो मुझे यह त्रुटि "फ़ाइल खोलने के लिए असंभव" मिल गई है (और मुझे पता है कि मैं इस प्रकार की फाइल खोल सकता हूं)।एंड्रॉइड डाउनलोड मैनेजर "फ़ाइल खोलने के लिए असंभव"

साथ ही, जब मैं अपने कंप्यूटर पर अपने फोन को प्लग करता हूं और जब मैं इसके साथ डाउनलोड फ़ाइल खोलता हूं, तो फ़ाइल सफलतापूर्वक खुली होती है और दूषित नहीं होती है।

मुझे अन्य त्रुटि नहीं है, इसलिए मैं वास्तव में खो गया हूं!

यहाँ मेरी कोड:

/*Data*/ 
    int filePosition = position - _subFolderNameList.length; 
    String url = _folder.getFiles().get(filePosition).getUrl(); 
    String FileName = _folder.getFiles().get(filePosition).getName(); 
    String Description = _folder.getFiles().get(filePosition).getUrl(); 

    /*Prepare request*/ 
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); 
    request.setDescription(Description); 
    request.setTitle(FileName); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     request.allowScanningByMediaScanner(); 
     request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
    } 
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, FileName); 

    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
    manager.enqueue(request); // Send request 

संपादित करें: प्रकट में अनुमति:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
+0

किस प्रकार की फ़ाइल आप डाउनलोड कर रहे हैं? और आप इसे "खोलने" की कोशिश कैसे कर रहे हैं? आपने केवल डाउनलोड करने के लिए कोड पोस्ट किया है। – FoamyGuy

+0

मैं सभी प्रकार के एक्सटेंशन को डाउनलोड करने का प्रयास करता हूं लेकिन परीक्षण के लिए मैं केवल पीडीएफ की तरह फ़ाइल के साथ प्रयास करता हूं क्योंकि मुझे पता है कि मैं इसे अपने फोन से खोल सकता हूं। इसे खोलने के लिए मैं बस डाउनलोड फ़ोल्डर (मेरे फोन के साथ) में जाता हूं और मैं बस फ़ाइल पर क्लिक करता हूं। – Maugun

+0

क्या आपने सुनिश्चित किया है कि आप अपने फोन के साथ * .pdf' फ़ाइलों को डाउनलोड कर सकते हैं, * हाथ से * डाउनलोड कर सकते हैं (हो सकता है कि दृश्य दृश्य को संभालने के लिए बस कोई ऐप इंस्टॉल नहीं किया गया हो)? क्योंकि मैं डिफ़ॉल्ट रूप से अपने डिवाइस के साथ कई फ़ाइल प्रकार नहीं खोल सका ... – tilpner

उत्तर

4

ठीक है, मैं समस्या मिल गया!

मुझे setMimeType() का उपयोग कर फ़ाइल का "एमआईएम सामग्री प्रकार" निर्दिष्ट करना था।

public DownloadManager.Request setMimeType (String mimeType); 
+0

नमस्ते, सुनिश्चित नहीं है कि आप अभी भी एसओएफ के आसपास हैं, लेकिन यदि आप फ़ाइल से लिंक से डाउनलोड कर रहे हैं, जिसे आप नहीं जानते कि फ़ाइल एक्सटेंशन क्या है, तो आप कैसे जानते हैं कि कौन सा एमआईएमई प्रकार सेट करना है? – toantran

2

हाँ आपको एमआईएमई प्रकार निर्दिष्ट करना होगा। स्वीकृत उत्तर में कुछ और विवरण जोड़ना।

public DownloadManager.Request setMimeType (String mimeType); 

एमआईएम प्रकार प्राप्त करने के लिए आप निम्न फ़ंक्शन का उपयोग कर सकते हैं।

private String getMimeFromFileName(String fileName) { 
    MimeTypeMap map = MimeTypeMap.getSingleton(); 
    String ext = MimeTypeMap.getFileExtensionFromUrl(fileName); 
    return map.getMimeTypeFromExtension(ext); 
} 

और उसी के Xamarin.Android कार्यान्वयन पीछा कर रहा है:

 private static string GetMimeTypeFromFileName(string fileName) 
     { 
      var map = MimeTypeMap.Singleton; 
      var ext = MimeTypeMap.GetFileExtensionFromUrl(fileName); 
      return map.GetMimeTypeFromExtension(ext); 
     } 
संबंधित मुद्दे