2013-03-21 6 views
5

Sto utilizzando DownloadManager per scaricare un file da un servizio web. Il download termina con successo, ma quando provo ad aprire il nuovo file nella cartella "download" ho questo errore "Impossibile aprire il file" (e so che posso aprire questo tipo di file).DownloadManager Android "Impossibile aprire il file"

Inoltre, quando collego il telefono al computer e quando apro il file di download con esso, il file si apre correttamente e non è danneggiato.

Non ho altri errori, quindi sono davvero perso!

Ecco il mio codice:

/*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: permesso nel Manifesto:

<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

il tipo di file stai scaricando? e come stai cercando di "aprirlo"? Hai pubblicato solo il codice per il download. – FoamyGuy

+0

Provo a scaricare tutti i tipi di estensione ma per il test provo solo con file come PDF perché so che posso aprirlo con il mio telefono. Per aprirlo basta andare nella cartella di download (con il mio telefono) e faccio semplicemente clic sul file. – Maugun

+0

Ti sei assicurato di poter aprire i file '.pdf', scaricati * a mano * con il tuo telefono (forse non c'è nessuna app installata per gestire VIEW Intent)? Perché non potevo aprire molti tipi di file con il mio dispositivo per impostazione predefinita ... – tilpner

risposta

4

Ok ho trovato il problema!

Ho dovuto specificare il "tipo di contenuto MIME" del file utilizzando setMimeType().

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

Ciao, non sono sicuro se sei ancora in giro per SOF, ma se stai scaricando da un collegamento a un file che non sai quale estensione di file è quella, come fai a sapere quale tipo MIME impostare? – toantran

2

Sì, è necessario specificare il tipo MIME. Aggiunta di alcuni ulteriori dettagli alla risposta accettata.

public DownloadManager.Request setMimeType (String mimeType); 

Per ottenere tipo MIME è possibile utilizzare la seguente funzione.

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

e il successivo è l'implementazione Xamarin.Android dello stesso:

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