sharnak82
sharnak82

Reputation: 13

Problems opening pdf in Android: Invalid file path

i need to open a pdf file from my android app. I have the pdf saved in the app package folder (/data/data/com.app.example/files). I have installed in the android emulator the adobe reader app. The problem is that when i try to open the pdf file with adobe reader the emulator shows me the next message: Invalid file path.

I don't know why is this happening but i'm stuck on this point. The file is saved correctly, because i can open it in my computer.

Here is the code:

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;
    }

Thanks in advance.

Regards, Javi.

Upvotes: 1

Views: 5460

Answers (2)

Dinesh Prajapati
Dinesh Prajapati

Reputation: 9510

This is because the PDF file resides in your own package and Adobe reader trying to access PDF file from your package which is not allowed for Android application development.

You can try to save file on SDCARD and then open it

Upvotes: 4

Udayan
Udayan

Reputation: 1374

Don't use the direct path to access files in application's private to your application. Instead use

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

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

Upvotes: 1

Related Questions