使用MODE_WORLD_READABLE读取pdf时出错?

时间:2012-02-23 12:27:36

标签: android file pdf path

我制作了一个应用程序,它从服务器下载pdf并将其存储在

/data/data/<package_name>files

使用此代码:

FileOutputStream fos = openFileOutput(pdfFileName, Context.MODE_WORLD_READABLE);
fos.write(pdfAsBytes);
fos.close();

但是当我从设备上已有的pdf阅读器应用程序中读取这些文件时,有时会显示黑屏,有时会显示带有烦人字体的文件。我正在使用的代码是:

File file = new File("/data/data/<package_Name>/files/pdffile");
Uri path = Uri.fromFile(file);
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try
{
    startActivity(pdfIntent);
}
catch(Exception e)
{
    Log.e("Activity Not Found Exception",e.toString());
}

我在其他路径(在SD卡中)尝试使用相同文件的相同代码,但它们工作正常。 请帮帮我,告诉我应该出错的地方。

应该采取哪些措施来纠正它?

2 个答案:

答案 0 :(得分:0)

你应该使用方法 android.content.Context.getFilesDir()

  

返回文件系统上目录的绝对路径,其中存储使用openFileOutput(String,int)创建的文件。

此代码适用于我:

File file = new File(this.getFilesDir(), pdfFileName);
Uri path = Uri.fromFile(file);
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
     startActivity(pdfIntent);
} catch(ActivityNotFoundException e) {
     Log.e("Activity Not Found Exception",e.toString());
}

答案 1 :(得分:0)

只有两种方法可以达到你想要的效果:


1)使用SDCARD

您将已下载的pdf保存在 SDCARD 的某个位置。像这样:

而不是创建文件:

File pdfFile = new File(Environment.getExternalStorageDirectory(), "pdffile");
FileOutputStream fos = new FileOutputStream(pdfFile);
fos.write(pdfAsBytes);
fos.close();
...

创建意图时使用pdfFile


2)使用自定义ContentProvider

如果您仍然不想使用SDCARD存储,则可以使用第二种方法。您可以使用应用的CacheDir(您将在那里下载文件)。这包括创建您自己的ContentProvider,然后您就可以将相应的URI传递给pdfreader应用。

有关如何执行此操作的详细信息,请here


没有已知的其他方法可以在Android中的第三方应用中打开任何下载的文件。