Open online pdf file through android intent?
I see that you are trying this method defining the data type:
Intent intent = new Intent();
intent.setDataAndType(Uri.parse(url), "application/pdf");
startActivity(intent);
but it will cause:
ActivityNotFoundException: No Activity found to handle Intent
Use method without the type definition and it will work perfectly:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
you can view PDF in web view like this
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse( "http://docs.google.com/viewer?url=" + pdfLink), "text/html");
startActivity(intent);
Best practice is wrapping your Intent
to Chooser
before starting. It provides users with built-in application selection dialog and lets avoid ActivityNotFoundException
Here a little example:
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setDataAndType(Uri.parse(msg.getData()), Constants.MIME_PDF);
Intent chooser = Intent.createChooser(browserIntent, getString(R.string.chooser_title));
chooser.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // optional
startActivity(chooser);
Where Constants.MIME_PDF
is defined as String value "application/pdf".
It is possible to ask PackageManager
is this Intent
has appropriate handling Activity
or not.
public static boolean isActivityForIntentAvailable(Context context, Intent intent) {
final PackageManager packageManager = context.getPackageManager();
List list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
You can view or download the pdf by either of the two ways i.e by opening it in device in-built browser or in the webview by embedding it in your app.
To open the pdf in browser,
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(pdf_url));
startActivity(browserIntent);
Instead to open in webview,
WebView webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(pdf_url);