我想在应用程序内部打开一个pdf文件(内部存储)。我有以下代码。但是一旦adobe pdf被打开,它会显示一个弹出错误,因为"文档路径无效"。是否只能从应用程序内部读取pdf文件?如果没有,请告诉我如何将其复制到外部存储。谢谢提前
File file_source = new File(getApplicationContext().getFilesDir()+"/"+"sample.pdf");
String string = "Hello world!";
try
{
file_source.createNewFile();
FileOutputStream outputStream;
outputStream = openFileOutput("sample.pdf", Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.close();
if(file_source.exists())
{
Uri path = Uri.fromFile(file_source);
Intent intent1 = new Intent(Intent.ACTION_VIEW);
intent1.setDataAndType(path, "application/pdf");
intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
startActivity(intent1);
}
catch (ActivityNotFoundException e) {
Toast.makeText(this,
"No Application Available to View PDF",
Toast.LENGTH_SHORT).show();
Intent intent2 = new Intent(Intent.ACTION_VIEW);
startActivity(intent2);
}
}
else
{
Log.d("TAG","no file exists");
}
}
catch (FileNotFoundException e) {
Log.d("TAG","File not found");
}
catch (IOException ioe) {
Log.d("TAG","Exception while reading file" + ioe);
}
答案 0 :(得分:0)
应用程序内部存储目录中的文件默认为应用程序的私有文件。这意味着没有PDF-Reader应用程序可以读取该文件(因为它不与您的应用程序pid一起运行 - 没有给出读取权限。)
您必须使用Context.MODE_WORLD_READABLE标志保存具有其他应用的显式读取权限的PDF。
还可以使用Context.openFileOutput()和Context.openFileInput()来读取和写入内部目录中的文件。不要硬编码这样的路径,它们可能会改变。
您可以通过以下代码将文件从内部存储复制到外部存储。
try {
String file_name="inputpdf.pdf";
File tempfile = new File(directory, file_name);
FileInputStream inStream = new FileInputStream(tempfile);
//where ctx is your context (this)
FileOutputStream fos = ctx.openFileOutput("Outputpdf", ctx.MODE_WORLD_WRITEABLE|ctx.MODE_WORLD_READABLE);
byte[] buffer = new byte[1024];
int length;
//copy the file content in bytes
while ((length = inStream.read(buffer)) > 0){
fos.write(buffer, 0, length);
}
inStream.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}