Actuellement, j'ai un fichier pdf url
, et j'aimerais simplement utiliser l'intention de l'ouvrir. Toutefois, cela ne fonctionne pas si je mets le url
dans intent
Mon code est comme ça, il renvoie toujours l'erreur ActivityNotFoundException
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(law.url), "application/pdf");
try {
startActivity(intent);
} catch (ActivityNotFoundException e){
Utility.showErrorDialog(
ctx,ctx.getResources().getString(R.string.sys_in,
ctx.getResources().getString(R.string.err_no_pdf_reader),
ctx.getResources().getString(R.string.close));
}
J'ai aussi essayé l'approche goolge doc mais mon client l'a rejetée, donc je n'utilise pas cette méthode.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("http://docs.google.com/viewer?url="
+ publish.get(Integer.parseInt((String) view.getTag())).pdfURL), "text/html");
ctx.startActivity(intent);
Merci pour l'aide
Erreur de chat du journal Mise à jour
04-23 18:18:50.487: E/AndroidRuntime(17161): Android.content.ActivityNotFoundException: No Activity found to handle Intent { act=Android.intent.action.VIEW dat=http://oshc.zizsoft.com/oshc_testing.pdf typ=application/pdf }
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.app.Instrumentation.checkStartActivityResult(Instrumentation.Java:1568)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.app.Instrumentation.execStartActivity(Instrumentation.Java:1439)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.app.Activity.startActivityForResult(Activity.Java:3356)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.app.Activity.startActivityForResult(Activity.Java:3317)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.Java:848)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.support.v4.app.Fragment.startActivity(Fragment.Java:878)
04-23 18:18:50.487: E/AndroidRuntime(17161): at com.example.oshpedia.Fragment.Shelf$4.onItemClick(Shelf.Java:142)
04-23 18:18:50.487: E/AndroidRuntime(17161): at it.sephiroth.Android.library.widget.AdapterView.performItemClick(AdapterView.Java:299)
04-23 18:18:50.487: E/AndroidRuntime(17161): at it.sephiroth.Android.library.widget.AbsHListView.performItemClick(AbsHListView.Java:972)
04-23 18:18:50.487: E/AndroidRuntime(17161): at it.sephiroth.Android.library.widget.AbsHListView$PerformClick.run(AbsHListView.Java:2511)
04-23 18:18:50.487: E/AndroidRuntime(17161): at it.sephiroth.Android.library.widget.AbsHListView$1.run(AbsHListView.Java:3200)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.os.Handler.handleCallback(Handler.Java:615)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.os.Handler.dispatchMessage(Handler.Java:92)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.os.Looper.loop(Looper.Java:137)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Android.app.ActivityThread.main(ActivityThread.Java:4882)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Java.lang.reflect.Method.invokeNative(Native Method)
04-23 18:18:50.487: E/AndroidRuntime(17161): at Java.lang.reflect.Method.invoke(Method.Java:511)
04-23 18:18:50.487: E/AndroidRuntime(17161): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:789)
04-23 18:18:50.487: E/AndroidRuntime(17161): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:556)
04-23 18:18:50.487: E/AndroidRuntime(17161): at dalvik.system.NativeStart.main(Native Method)
Vous pouvez afficher ou télécharger le fichier pdf de l’une des deux manières, c’est-à-dire en l’ouvrant dans le navigateur intégré à l’appareil ou dans la visualisation Web en l’intégrant à votre application.
Pour ouvrir le pdf dans le navigateur,
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(pdf_url));
startActivity(browserIntent);
Au lieu d'ouvrir dans webview,
Webview webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(pdf_url);
La meilleure pratique consiste à emballer votre Intent
à Chooser
avant de commencer. Il fournit aux utilisateurs une boîte de dialogue de sélection d'application intégrée et permet d'éviter ActivityNotFoundException
Voici un petit exemple:
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);
Il est possible de demander PackageManager
si cette Intent
a un traitement approprié Activity
ou non.
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;
}
vous pouvez voir PDF dans la vue Web comme ceci
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse( "http://docs.google.com/viewer?url=" + pdfLink), "text/html");
startActivity(intent);
vous pouvez voir le pdf en webview comme ceci
WebView webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginsEnabled(true);
webView.loadUrl("https://docs.google.com/viewer?"+pdf_url);
Téléchargez le code source à partir d’ici ( Ouvrez le fichier PDF à partir de l’URL dans Android par programme )
MainActivity.Java
package com.deepshikha.openpdf;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;
import Android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity {
WebView webview;
ProgressBar progressbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView)findViewById(R.id.webview);
progressbar = (ProgressBar) findViewById(R.id.progressbar);
webview.getSettings().setJavaScriptEnabled(true);
String filename ="http://www3.nd.edu/~cpoellab/teaching/cse40816/Android_tutorial.pdf";
webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + filename);
webview.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url){
// do your stuff here
progressbar.setVisibility(View.GONE);
}
});
}
}
Je vois que vous essayez cette méthode pour définir le type de données:
Intent intent = new Intent();
intent.setDataAndType(Uri.parse(url), "application/pdf");
startActivity(intent);
mais cela causera:
ActivityNotFoundException: Aucune activité trouvée pour gérer l'intention
Utilisez la méthode sans la définition du type et cela fonctionnera parfaitement:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
L'erreur réelle
Android.content.ActivityNotFoundException: No Activity found to
handle Intent
{
act=Android.intent.action.VIEW
dat=http://oshc.zizsoft.com/oshc_testing.pdf typ=application/pdf
}
Cela dit que:
broadcast
" et intention de laisser le système essayer d'ouvrir un fichier PDF
PDF
)Vous avez juste besoin d'un PDF viewer
de quelque sorte.
Solution
Obtenez une application PDF reader
ou utilisez la solution de @ Mahendra.
vous pouvez essayer ceci . cela fonctionne pour les deux.pdfet.docx
String pdfUrl = "abc.pdf"; //
String url = "http://docs.google.com/gview?embedded=true&url=" + pdfUrl;
WebView webView = findViewById(R.id.webview_cv_viewer);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);