web-dev-qa-db-fra.com

Ouvrir un fichier pdf en ligne via Android?

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)
13
user3538235

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);
41
Akanksha Hegde

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;
}
11
Alexander Skvortsov

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);
9
Asad Butt

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);
7
Mahendra

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

    }
}
4
Deepshikha Puri

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);
2
Elenasys

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:

  1. Vous "broadcast" et intention de laisser le système essayer d'ouvrir un fichier PDF
  2. Le système ne trouve aucune application enregistrée capable de gérer ce type de fichier (PDF)

Vous avez juste besoin d'un PDF viewer de quelque sorte.

Solution

Obtenez une application PDF reader ou utilisez la solution de @ Mahendra.

2
shkschneider

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);
0
Dinesh Sarma