我在打开我保存到我的 android 应用程序中的文件系统的 pdf 时遇到问题。
我有一个从服务器序列化字节数组的休息调用,然后我将此字节数组保存为我的 pdf 文件。这部分工作正常,我可以导航到保存 pdf 的目录并打开它一切正常
但是,当尝试通过手机 GS4(POLARIS Office View 5)或 Adobe Reader 上的默认 pdf 查看器从我的应用程序中打开 pdf 时,两个应用程序都无法打开文件。POLARIS 返回吐司“无法打开此文档” 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
现在我的假设是两个应用程序都不能因为权限而打开 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”这赋予了对这些文件的 3rd 方应用程序的读取访问权限??!!
下面的代码说明了我如何尝试阅读 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);
如果有人能指出我正确的方向,我将不胜感激
谢谢