无法在Android应用程序中打开pdf

时间:2013-05-08 12:03:55

标签: android pdf permissions

我在安装我的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);

如果有人能指出我正确的方向,我会非常感激

由于

1 个答案:

答案 0 :(得分:1)

您似乎在确定路径时有一些代码重复 - 您的编写代码似乎使用不同的代码来确定路径,而不是代码为Uri构建Intent }。你确定那些匹配吗?

getExternalFilesDir(Constants.BASE_EXTERNAL_DIRECTORY_ATTACHMENTS)用于创建文件,而getExternalStorageDirectory()用于Uri。您可能希望删除一些Log语句或断点,以确保所有内容都按预期排列。更好的是,你可能想要整合一下这个逻辑,所以你确定你在两个地方使用相同的值。