2014-11-22 51 views
0

我下載了一個pdf文件到內部存儲器,然後以編程方式創建按鈕,將它們帶到一個操作視圖。我可以listFiles []和吐司,他們在那裏,但PDF瀏覽器說文件不存在或文件無法查看。我正在下載pdf到內部存儲器,但我的pdf查看器找不到它們

這些是在下載過程中寫入內部存儲器的主要組件。

private File file; 
file = new File(mContext.getFilesDir(), filename+".pdf"); 
// Output stream to write file in internal storage 
        OutputStream output = new BufferedOutputStream(new FileOutputStream(file)); 

然後在另一個活動我從數據庫中獲取文件名和創建按鈕

// ....Inside a for loop ..... 
Button c3 = new Button(this); 
     c3.setText("view"); 
     c3.setId(p.getPosterID()); 
     c3.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v){ 
       File pdfFile = getBaseContext().getFileStreamPath(filename+".pdf"); 
       if (pdfFile.exists()){ 
        Uri path = Uri.fromFile(pdfFile); 
//================================================================================ 
        Log.d("path: ", path.toString()); 
    //this will log: file:///data/data/com.myapp.posterviewer/files/5453b54b83b5f.pdf 
//================================================================================ 
        Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
        pdfIntent.setDataAndType(path, "application/pdf"); 
        pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        try{ 
         startActivity(pdfIntent); 
        } 
        catch(ActivityNotFoundException e){ 
         Toast.makeText(ListPosters.this, "No Application Available", Toast.LENGTH_LONG).show(); 
        } 
       } 
       else{ 
        Toast.makeText(ListPosters.this, "The file does not exist", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 

我創造了正確的路徑與URI路徑表? 我無法在應用程序文件夾中看到來自Windows資源管理器的文件。 但我所有的檢查說文件是存在的,我認爲這將在應用程序的根文件夾。

+1

我懷疑這可能是一個權限問題。我不確定是否允許PDF閱讀器從您的應用程序的內部文件夾中讀取。也許嘗試下載到外部下載文件夾,如果您從瀏覽器下載某些內容,也可以使用該文件夾。 – cYrixmorten 2014-11-22 18:02:23

+0

或者,使用'FileProvider'從您的內部存儲器提供文件。 – CommonsWare 2014-11-22 18:03:37

+0

@CommonsWare ..我剛剛閱讀了關於使用pdf查看庫和某人在2012年後發佈的一篇文章中提到你。那麼,2年後你會推薦哪種pdf查看庫?我剛剛在java/android中啓動,所以FileProvider對我來說是新的,我檢查一下。 – silversunhunter 2014-11-22 18:07:58

回答

0

只有內部存儲器可見於您的應用程序。 OutSide應用程序(Pdf Viewer)無法訪問它。保存您的PDF文件在外部存儲,然後通過PDF查看器打開它

+0

好的,我現在就試試。就像旁註一樣,第一輪代碼將文件保存到應用DOWNLOAD文件夾中。這是否有特別的許可,因爲我能夠通過public void showDownload(View view)來查看這些內容{Intent i = new Intent(); 012.i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS); startActivity(i); }'? – silversunhunter 2014-11-22 18:08:51

+0

您可以在應用程序中查看它。儘管嘗試打開使用其他應用程序是問題。因爲一個應用程序無法查看其他應用程序的內部存儲。互聯網權限足以使用DownloadManager。但要保存和讀取外部存儲器,您需要寫入和讀取外部存儲權限 – MathanG 2014-11-22 18:13:46