我在安装我的android应用程序中保存到文件系统的pdf时遇到问题。
我有一个从服务器序列化字节数组的休息调用,然后我将这个字节数组保存为我的pdf文件。这部分工作正常,我可以导航到保存pdf的目录并打开所有o.k。
但是,当尝试通过我的手机GS4(POLARIS Office View 5)或Adobe Reader上的默认pdf查看器从我的应用程序中打开pdf时,两个应用程序都无法打开该文件。 POLARIS返回一个toast“此文档无法打开”Adobe启动但随后抛出文档路径无效。
我的代码用于持久保存我的文件。
private String createFile(AttachmentDTO dto) {
String fileExtention = getMimeType(dto);
File file = new File(context.getExternalFilesDir(Constants.BASE_EXTERNAL_DIRECTORY_ATTACHMENTS), dto.getId() + fileExtention);
FileOutputStream fos;
try {
Files.write(dto.getAttachment(), file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return file.getPath();
}
我的文件的完整路径是
/storage/emulated/0/Android/data/com.rsd.childcare.mobile.client/files/attachments/2.pdf
现在我的假设是,由于权限,两个app都无法打开pdf。但是我的清单中有以下内容
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我知道在声明WRITE_EXTERNAL_STORAGE时你也获得了READ权限,但是在4.2中他们已经添加了这个,所以我想我会尝试它,但仍然没有乐趣。
我“想到”的另一件事是通过调用“getExternalFilesDir”这给了第三方应用程序对这些文件的读取权限?? !!
下面的代码说明了我是如何阅读pdf
的String filePath = Attachment.findAttachmentPath(Integer.parseInt((String) view.getContentDescription()));
File file = new File(Environment.getExternalStorageDirectory() + filePath);
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
如果有人能指出我正确的方向,我会非常感激
由于
答案 0 :(得分:1)
您似乎在确定路径时有一些代码重复 - 您的编写代码似乎使用不同的代码来确定路径,而不是代码为Uri
构建Intent
}。你确定那些匹配吗?
getExternalFilesDir(Constants.BASE_EXTERNAL_DIRECTORY_ATTACHMENTS)
用于创建文件,而getExternalStorageDirectory()
用于Uri
。您可能希望删除一些Log
语句或断点,以确保所有内容都按预期排列。更好的是,你可能想要整合一下这个逻辑,所以你确定你在两个地方使用相同的值。