2013-03-21 3 views
5

저는 DownloadManager를 사용하여 webService에서 파일을 다운로드하고 있습니다. 다운로드가 성공적으로 끝났지 만 "다운로드"폴더에서 새 파일을 열려고하면 "이 파일을 열 수 없음"이라는 오류가 발생합니다.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); 
     }