如何在特定查看器中从内部存储打开文件? [复制]

Posted

技术标签:

【中文标题】如何在特定查看器中从内部存储打开文件? [复制]【英文标题】:How to open file from internal storage in specific viewer? [duplicate] 【发布时间】:2018-07-10 11:01:03 【问题描述】:

我想打开InternalStorage中的文件

我在 data/data/mypackage/files 路径下创建了 Documents 目录。

现在我想在 PDF 查看器或文本查看器等外部应用程序中打开文件。

我已经检查过,文件存在,但是当我在特定查看器(如 PDF 查看器)中打开文件时,

它显示 Toast-“无法显示 PDF”

我正在使用以下代码在特定查看器中打开文件。

File file=new File(context.getFilesDir()+"/Documents/"+fileInfo.getFilename()+"."+fileInfo.getFiletype());
if (file.exists())
    Uri uri = Uri.parse("file://"+file);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(uri, "application/pdf");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    context.startActivity(intent);

选择器将为选定的 PDF 查看器打开。

如何从内部存储打开 PDF 或文本文件 (data/data/com..somepackagename/files)?

【问题讨论】:

试试这个intent.setDataAndType(uri, "/"); 使用FileProvider。正如一个答案指出的那样,其他应用程序无法访问您的应用程序的getFilesDir()。另外,Uri.fromFile() 将无法在 android 7.0+ 设备上运行,因为以这种方式构建的 Uri 值被禁止在 Intents 中使用。 【参考方案1】:

第三方应用程序无法访问您的包文件夹,如果您想打开该文件第三方应用程序,将该文件移动到共享文件夹中

【讨论】:

以上是关于如何在特定查看器中从内部存储打开文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

面具打不开内部存储空间

如何在 Android 10、Target API 29 中从设备的共享存储(根目录)读取现有文件? [复制]

如何通过提供文件路径在默认图像查看器中打开图像?

在 Forge 查看器中从 Revit 模型重建对象组

在脱机伪造查看器中打开本地保存的svf文件的问题

从 Autodesk Forge 3D 查看器下载文件