Проблемы с открытием PDF в Android: неверный путь к файлу - PullRequest
1 голос
/ 25 октября 2011

Мне нужно открыть файл 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 && 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 result;
    }

Заранее спасибо.

С уважением, Хави.

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

Это потому, что файл PDF находится в вашем собственном пакете, а программа Adobe Reader пытается получить доступ к файлу PDF из вашего пакета, который не разрешен для разработки приложений для Android.

Вы можете попытаться сохранить файл на SDCARD, а затемоткрой его

1 голос
/ 25 октября 2011

Не используйте прямой путь для доступа к файлам, находящимся в частном приложении для вашего приложения.Вместо этого используйте

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);

См .: http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...