2015-02-01 2 views
0

장치에 저장하는 파일을 열려고하는데 열 수 없습니다. 장치에 "이 문서를 열 수 없습니다."라고 표시됩니다.Android DownloadManager가 파일을 장치에 저장하고 열 수 없습니다.

여기 내 코드가 있습니다. 파일은 .ppt 형식입니다. 여기

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

코드입니다 : 분명히

내가 매니페스트에 이러한 권한이

String fileName = doc.getName(); 

String packageName = fragment.getActivity().getPackageName(); 
String path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/Android/data/" + packageName + "/files/"; 

File saveFile = new File(path + fileName); 

File parentDest = saveFile.getParentFile(); 
if (!parentDest.exists()) { 
    parentDest.mkdirs(); //make all the directory structures needed 
} 
if (!saveFile.exists()) { 

    try { 
     saveFile.createNewFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    Toast.makeText(getContext(), "Downloading...", Toast.LENGTH_SHORT).show(); 

    downloadingDocs.add(doc); 

    final DownloadManager downloadManager; 

    final long myDownloadReference; 

    downloadManager = (DownloadManager) fragment.getActivity().getSystemService(Context.DOWNLOAD_SERVICE); 

    Uri uri = Uri.parse(url); 

    DownloadManager.Request request = new DownloadManager.Request(uri); 

    request.addRequestHeader("Authorization", "Basic " + SharedPref.getAuthPrefValue()); 
    request.addRequestHeader("Device", BaseApplication.getCurrentDevice().getDevice().toString()); 
    request.addRequestHeader("DeviceId", BaseApplication.getCurrentDevice().getDeviceId()); 
    request.setDescription(fileName).setTitle("Downloading Document"); 
    request.setDestinationInExternalFilesDir(getContext(), path, fileName); 
    request.setVisibleInDownloadsUi(true); 
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE); 

    myDownloadReference = downloadManager.enqueue(request); 

    finalHolder1.downloadProgress.setVisibility(View.VISIBLE); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      downloading = true; 

      while (downloading) { 
       DownloadManager.Query q = new DownloadManager.Query(); 
       q.setFilterById(myDownloadReference); 
       Cursor cursor = downloadManager.query(q); 
       cursor.moveToFirst(); 
       int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); 
       int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); 

       if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) { 
        downloading = false; 
        downloadingDocs.remove(doc); 
       } 
       //final double dl_progress = (bytes_downloaded/bytes_total) * 100; 
       final int dl_progress = (int) ((bytes_downloaded * 100l)/bytes_total); 
       fragment.getActivity().runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        finalHolder2.downloadProgress.setProgress((int) dl_progress); 
       } 
      }); 
      cursor.close(); 
     } 
    }}).start(); 
} else { 
    Intent intent = new Intent(); 
    intent.setAction(android.content.Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(saveFile), "application/vnd.ms-powerpoint"); 

    fragment.getActivity().startActivity(intent); 
} 
+0

'파일을 여는 데 응용 프로그램을 찾을 수 없습니다.'라는 'startActivity (Intent.createChooser (intent, "파일 열기 ..."));'를 사용하십시오. –

+0

무엇이 다른가요? action_view는 이미 열 수있는 프로그램 목록으로 팝업을 엽니 다. 그러나 POLARIS Office Viewer 5와 Kingsoft Office의 두 가지 프로그램을 이미 시도했습니다. 둘 다 열 수 있어야하지만 둘 다 "이. 서를 열 수 없습니다"라고 써 있습니다. – JozeRi

+0

sdcard 브라우저를 사용하여 수동으로 파일을 볼 수 있습니까? –

답변

0

확인 그래서 나는 해결책을 찾았을, 나는 어쩌면이 사람을 도움이 될 것입니다 여기에 게시합니다 그렇지 않으면 앞으로.

기본적으로 디버깅과 많은 로그가 도움이됩니다. 결국 다운로드 관리자가이 경로에 파일을 자동으로 저장한다는 사실을 알게되었습니다 :

"저장/에뮬레이션/0/Android/data /"+ 패키지 이름 + "/ files /".

그는 내가 만든 경로를 모두 추가했습니다. 그래서 파일을 찾는 경로가 올바르지 않습니다.

내가 한 것은 내 자신의 파일을 다운로드 관리자의 올바른 경로와 일치시키는 것입니다.

관련 문제