【问题标题】:How to open a PDF stored in Internal Memory如何打开存储在内存中的 PDF
【发布时间】:2013-01-14 21:47:55
【问题描述】:

我有一个应用程序,它下载 PDF 文件并将其以 MODE_PRIVATE(出于安全目的)存储在应用程序的内部存储器中:

FileOutputStream fos = getApplicationContext().openFileOutput(LOCAL_FILE_NAME, Context.MODE_PRIVATE);

InputStream inputStream = entity.getContent();
byte[] buffer = new byte[1024];
int bufferLength = 0; 

while((bufferLength = inputStream.read(buffer)) > 0) {           
  fos.write(buffer, 0, bufferLength);      
}

fos.close();

如何打开并显示下载的 PDF 文件?我一直在 StackOverflow 中搜索,但没有找到明确的解决方案。

看来问题是Android没有原生支持打开PDF文件,所以我认为有两种选择:

  1. 使用一些外部库来显示 PDF 文件。有什么好用的吗?

  2. 启动 Intent 以显示 PDF 文件,但存储为 MODE_PRIVATE 的文件似乎无法被外部应用程序打开。我找到了一些将文件复制到外部存储器然后启动 Intent 的解决方案,但是这个过程破坏了 MODE_PRIVATE 选项的安全目的,对吧?

感谢阅读

【问题讨论】:

    标签: android


    【解决方案1】:

    如何打开并显示下载的 PDF 文件?

    创建ContentProvider 来提供PDF 文件,然后使用ACTION_VIEW IntentUri 到您的ContentProvider 以在用户选择的PDF 查看器中打开它。

    This sample project 演示如何从内部存储提供 PDF 文件。

    【讨论】:

    • 感谢您的回答 CommonsWare,此解决方案适用于保存为 MODE_PRIVATE 的文件?
    • 一旦您通过ContentProvider 提供文件,您存储文件的方式或位置就不再重要了。只要 PDF 查看器支持content:// 方案,您就可以开始使用。所有正确的,做。
    • @Spike777:“此解决方案适用于保存为 MODE_PRIVATE 的文件?” - 是的。文件默认为MODE_PRIVATE,我链接的示例项目有效。
    • 谢谢你的回答,我去测试一下
    【解决方案2】:

    要使内部存储中的文件可供其他应用使用,最简洁的方法是使用内容提供程序。 幸运的是,Android 附带了FileProvider——一个可能正好满足您需求的实现。 您不需要实现代码(与@CommonsWare 的方法相反),您只需要在清单中指定提供程序即可。

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 2014-11-25
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多