2013-03-21 13 views
5

WebManagerからファイルをダウンロードするにはDownloadManagerを使用しています。ダウンロードが正常終了しましたが、新しいファイルを "ダウンロード"フォルダに開こうとすると、 "このファイルを開くことはできません"というエラーが表示されます。Android 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

私はすべての種類の拡張機能をダウンロードしようとしていますが、テストのために私は自分の携帯電話で開くことができるので、PDFのようなファイルで試してみます。 これを開くには、私はダウンロードフォルダ(私の電話で)に入って、ファイルをクリックするだけです。 – Maugun

+0

あなたの電話で手作業でダウンロードした '.pdf'ファイルを開くことができますか?(VIEWインテントを処理するためのアプリがインストールされていないことがありますか?私のデバイスではデフォルトで多くのファイルタイプを開くことができなかったので... – tilpner

答えて

4

オーケー、私は問題を発見しました!

setMimeType()を使用してファイルの「MIMEコンテンツタイプ」を指定する必要がありました。

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

こんにちは、あなたはまだSOFの周りにいるかどうかはわかりませんが、ファイル拡張子がわからないリンクからファイルをダウンロードしている場合は、どのMIMEタイプを設定するのかをどのように知っていますか? – toantran

2

はい、MIMEタイプを指定する必要があります。 受け入れられた回答にいくつかの詳細を追加します。

public DownloadManager.Request setMimeType (String mimeType); 

MIMEタイプを取得するには、次の機能を使用できます。

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); 
     } 
関連する問題