5

我有一个应用程序,它下载 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 选项的安全目的,对吧?

谢谢阅读

4

2 回答 2

11

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

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

此示例项目演示了如何从内部存储中提供 PDF 文件。

于 2013-01-14T21:58:47.417 回答
1

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

于 2015-12-07T16:18:08.167 回答