我制作了一个应用程序,它从服务器下载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卡中)尝试使用相同文件的相同代码,但它们工作正常。 请帮帮我,告诉我应该出错的地方。
应该采取哪些措施来纠正它?
答案 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)
只有两种方法可以达到你想要的效果:
您将已下载的pdf
保存在 SDCARD 的某个位置。像这样:
而不是创建文件:
File pdfFile = new File(Environment.getExternalStorageDirectory(), "pdffile");
FileOutputStream fos = new FileOutputStream(pdfFile);
fos.write(pdfAsBytes);
fos.close();
...
创建意图时使用pdfFile
。
ContentProvider
如果您仍然不想使用SDCARD存储,则可以使用第二种方法。您可以使用应用的CacheDir
(您将在那里下载文件)。这包括创建您自己的ContentProvider
,然后您就可以将相应的URI传递给pdfreader应用。
有关如何执行此操作的详细信息,请here。
没有已知的其他方法可以在Android中的第三方应用中打开任何下载的文件。