我下載了一個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資源管理器的文件。 但我所有的檢查說文件是存在的,我認爲這將在應用程序的根文件夾。
我懷疑這可能是一個權限問題。我不確定是否允許PDF閱讀器從您的應用程序的內部文件夾中讀取。也許嘗試下載到外部下載文件夾,如果您從瀏覽器下載某些內容,也可以使用該文件夾。 – cYrixmorten 2014-11-22 18:02:23
或者,使用'FileProvider'從您的內部存儲器提供文件。 – CommonsWare 2014-11-22 18:03:37
@CommonsWare ..我剛剛閱讀了關於使用pdf查看庫和某人在2012年後發佈的一篇文章中提到你。那麼,2年後你會推薦哪種pdf查看庫?我剛剛在java/android中啓動,所以FileProvider對我來說是新的,我檢查一下。 – silversunhunter 2014-11-22 18:07:58