Android open pdf file Android open pdf file android android

Android open pdf file


The problem is that there is no app installed to handle opening the PDF. You should use the Intent Chooser, like so:

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename);Intent target = new Intent(Intent.ACTION_VIEW);target.setDataAndType(Uri.fromFile(file),"application/pdf");target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);Intent intent = Intent.createChooser(target, "Open File");try {    startActivity(intent);} catch (ActivityNotFoundException e) {    // Instruct the user to install a PDF reader here, or something}   


As of API 24, sending a file:// URI to another app will throw a FileUriExposedException. Instead, use FileProvider to send a content:// URI:

public File getFile(Context context, String fileName) {    if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {        return null;    }    File storageDir = context.getExternalFilesDir(null);    return new File(storageDir, fileName);}public Uri getFileUri(Context context, String fileName) {    File file = getFile(context, fileName);    return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);}

You must also define the FileProvider in your manifest:

<provider    android:name="android.support.v4.content.FileProvider"    android:authorities="com.mydomain.fileprovider"    android:exported="false"    android:grantUriPermissions="true">    <meta-data        android:name="android.support.FILE_PROVIDER_PATHS"        android:resource="@xml/file_paths" /></provider>

Example file_paths.xml:

<?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android">    <external-files-path name="name" path="path" /></paths>

Replace "name" and "path" as appropriate.

To give the PDF viewer access to the file, you also have to add the FLAG_GRANT_READ_URI_PERMISSION flag to the intent:

private void displayPdf(String fileName) {    Uri uri = getFileUri(this, fileName);    Intent intent = new Intent(Intent.ACTION_VIEW);    intent.setDataAndType(uri, "application/pdf");    // FLAG_GRANT_READ_URI_PERMISSION is needed on API 24+ so the activity opening the file can read it    intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_GRANT_READ_URI_PERMISSION);    if (intent.resolveActivity(getPackageManager()) == null) {        // Show an error    } else {        startActivity(intent);    }}

See the FileProvider documentation for more details.


String dir="/Attendancesystem"; public void displaypdf() {        File file = null;            file = new File(Environment.getExternalStorageDirectory()+dir+ "/sample.pdf");        Toast.makeText(getApplicationContext(), file.toString() , Toast.LENGTH_LONG).show();        if(file.exists()) {            Intent target = new Intent(Intent.ACTION_VIEW);            target.setDataAndType(Uri.fromFile(file), "application/pdf");            target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);            Intent intent = Intent.createChooser(target, "Open File");            try {                startActivity(intent);            } catch (ActivityNotFoundException e) {                // Instruct the user to install a PDF reader here, or something            }        }        else            Toast.makeText(getApplicationContext(), "File path is incorrect." , Toast.LENGTH_LONG).show();    }