#java #android #pdf
#java #Android #PDF
Вопрос:
мне нужно открыть PDF-файл из моего приложения для Android. У меня есть pdf, сохраненный в папке пакета приложения (/data/data/com.app.example/files). Я установил в эмулятор Android приложение Adobe Reader. Проблема в том, что когда я пытаюсь открыть файл PDF с помощью Adobe Reader, эмулятор показывает мне следующее сообщение: неверный путь к файлу.
Я не знаю, почему это происходит, но я застрял на этом. Файл сохранен правильно, потому что я могу открыть его на своем компьютере.
Вот код:
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
try {
HttpResponse response = client.execute(request);
request(response, file_name);
File file = new File("data/data/com.app.example/files/" file_name);
PackageManager packageManager = getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW);
testIntent.setType("application/pdf");
List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
if(file.exists())
{
if (list.size() > 0 amp;amp; file.isFile()) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}else
{
System.out.println("NO APPs TO OPEN PDFs.");
}
}
else
{
System.out.println("FILE DOES NOT EXIST.");
}
}catch(Exception ex){
System.out.println("Failed!");
ex.printStackTrace();
}
public String request(HttpResponse response, String file){
String result = "";
try{
InputStream in = response.getEntity().getContent();
FileOutputStream f = openFileOutput(file, MODE_WORLD_WRITEABLE);
byte[] buffer = new byte[in.toString().length()];
int len1 = 0;
int counter = 0;
while ((len1 = in.read(buffer)) > 0) {
f.write(buffer, 0, len1);
counter ;
}
f.close();
}
catch(Exception ex){
result = "Error";
}
return resu<
}
Заранее спасибо.
С уважением, Хави.
Ответ №1:
Это связано с тем, что файл PDF находится в вашем собственном пакете, и Adobe Reader пытается получить доступ к файлу PDF из вашего пакета, который не разрешен для разработки приложений для Android.
Вы можете попытаться сохранить файл на SDCARD, а затем открыть его
Комментарии:
1. Спасибо Drax. Это позволило мне продолжить разработку xD.
Ответ №2:
Не используйте прямой путь для доступа к файлам в приложении private к вашему приложению. Вместо этого используйте
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
См.: http://developer.android.com/guide/topics/data/data-storage.html#filesInternal