我创建了一个类openPDF,它将一个字节数组作为输入,并使用Adobe Reader显示PDF文件。代码:
private void openPDF(byte[] PDFByteArray) {
try {
// create temp file that will hold byte array
File tempPDF = File.createTempFile("temp", ".pdf", getCacheDir());
tempPDF.deleteOnExit();
FileOutputStream fos = new FileOutputStream(tempPDF);
fos.write(PDFByteArray);
fos.close();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(tempPDF);
intent.setDataAndType(uri, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
} catch (IOException ex) {
String s = ex.toString();
ex.printStackTrace();
}
}
当我通过打算时,adobe reader的错误是“文件路径无效”。我阅读了有关下载和查看android中的PDF的所有其他帖子,但dint帮助很多。有什么建议吗?
答案 0 :(得分:1)
我认为问题是其他应用无权访问应用私有数据区域中的文件(如缓存目录)。
候选解决方案:
将文件模式更改为MODE_WORLD_READABLE,以便其他应用可以读取
...
String fn = "temp.pdf";
Context c = v.getContext();
FileOutputStream fos = null;
try {
fos = c.openFileOutput(fn, Context.MODE_WORLD_READABLE);
fos.write(PDFByteArray);
} catch (FileNotFoundException e) {
// do something
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (fos!=null) {
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
String filename = c.getFilesDir() + File.separator + fn;
File file = new File(filename);
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
...
或将pdf文件写入/ sdcard分区。
您可以使用android.os.Environment API获取路径,并记住将权限添加到您应用的AndroidManifest.xml文件中。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
此致
陈子腾答案 1 :(得分:0)
我创建此代码以使用Adobe的应用程序打开存在于Dowloads文件夹中的特定.pdf文件
File folder = new File(Environment.getExternalStorageDirectory(), "Download");
File pdf = new File(folder, "Test.pdf");
Uri uri = Uri.fromFile(pdf);
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("com.adobe.reader");
intent.setDataAndType(uri, "application/pdf");
startActivity(intent);
它对我有用。所以我想你的问题可能是temprorary文件。尝试将文件写入SD卡。为此,您需要将android.permission.WRITE_EXTERNAL_STORAGE
添加到AndroidManifest.xml。