2013-03-21 12 views
5

Używam DownloadManager do pobrania pliku z usługi webService. Kończy się koniec downloadu, ale kiedy próbuję otworzyć nowy plik w folderze "download", mam błąd "Niemożliwe otwarcie pliku" (i wiem, że mogę otworzyć ten typ pliku).Android DownloadManager "Niemożliwe otwarcie pliku"

Ponadto, gdy podłączam mój telefon do komputera i kiedy otwieram plik do pobrania, plik otwiera się pomyślnie i nie jest uszkodzony.

Nie mam innego błędu, więc jestem naprawdę zagubiony!

Oto mój kod:

/*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 

Edit: Permission w manifeście:

<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

jaki typ pliku są pobraniu? i jak próbujesz go "otworzyć"? Wysłałeś tylko kod do pobrania. – FoamyGuy

+0

Próbuję pobrać wszelkiego rodzaju rozszerzenie, ale do testu próbuję tylko z plikiem takim jak PDF, ponieważ wiem, że mogę go otworzyć za pomocą mojego telefonu. Aby go otworzyć po prostu przejdę do folderu pobierania (z mojego telefonu) i po prostu klikam plik. – Maugun

+0

Czy masz pewność, że możesz otwierać pliki '.pdf', pobierane * ręcznie * z telefonem (może nie jest zainstalowana żadna aplikacja obsługująca ZAPROGRAMOWANIE WIDOKU)? Ponieważ nie mogłem domyślnie otwierać wielu plików z moim urządzeniem ... – tilpner

Odpowiedz

4

Ok znalazłem problem!

Musiałem określić "typ zawartości MIME" pliku przy użyciu setMimeType().

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

Witam, nie jestem pewien, czy nadal korzystasz z SOF, ale jeśli pobierasz z linku do pliku, którego nie znasz, czym jest rozszerzenie pliku, skąd wiesz, jaki typ MIME ustawić? – toantran

2

Tak należy określić typ MIME. Dodanie kilku dodatkowych informacji do zaakceptowanej odpowiedzi.

public DownloadManager.Request setMimeType (String mimeType); 

Aby uzyskać typ MIME, można użyć następującej funkcji.

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

i następuje realizacja Xamarin.Android tego samego:

 private static string GetMimeTypeFromFileName(string fileName) 
     { 
      var map = MimeTypeMap.Singleton; 
      var ext = MimeTypeMap.GetFileExtensionFromUrl(fileName); 
      return map.GetMimeTypeFromExtension(ext); 
     } 
Powiązane problemy