我尝试在我的应用程序中打开PDF。 首先,我像这样创建PDF:
String filename = Environment.getExternalStorageDirectory().toString()+"/mypdf.pdf";
File file = new File(filename);
try {
FileOutputStream bos = new FileOutputStream(file);
bos.write(Base64.decode(base64, 0));
bos.flush();
bos.close();
} catch (IOException e) {
Log.e(TAG, "IOError with PDF");
e.printStackTrace();
}
Intent intent = new Intent(this, PdfActivity.class);
intent.putExtra("file", filename);
startActivity(intent);
该文件创建良好且可读,我可以使用ESExplorer应用程序打开它。
此文件位于/storage/emulated/0/myfile.pdf
在PdfActivity中我尝试打开PDF:
Bundle extras = getIntent().getExtras();
String url = extras.getString("file");
File file = new File(url);
try {
if (file.exists()) {
Uri path = Uri.parse(url);
Intent objIntent = new Intent(Intent.ACTION_VIEW);
objIntent.setDataAndType(path, "application/pdf");
objIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(objIntent);
} else {
Toast.makeText(this, "File NotFound", Toast.LENGTH_SHORT).show();
}
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "No Viewer Application Found", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
file.exists()
返回true,意图启动,但我的PDF阅读器说:"找不到文件"
我已经在外部存储上添加了读写权限。
有人知道为什么它无法访问我的文件吗?
答案 0 :(得分:0)
objIntent.setDataAndType(url, "application/pdf");
在第二个代码段中使用上面的行也声明字符串网址作为全局变量希望它会帮助你,如果它不起作用尝试使用文件路径的硬编码值看看它是否有效?
你确定文件存在吗?检查这个场景太多了:))
答案 1 :(得分:0)
我找到了解决方案。 我像那样替换了Uri:
Uri path = Uri.fromFile(file);
它有效!