webentwicklung-frage-antwort-db.com.de

Online-PDF-Datei durch Android-Absicht öffnen?

Derzeit habe ich ein pdf url, und ich möchte einfach die Absicht verwenden, es zu öffnen. Es funktioniert jedoch nicht, wenn ich die url in intent stelle.

Mein Code ist so, er gibt immer ActivityNotFoundException Fehler

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

Ich habe auch den goolge-doc-Ansatz ausprobiert, aber mein Client lehnt dies ab, daher verwende ich diese Methode nicht 

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

Danke für die Hilfe

Log cat Fehler Update

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

Sie können die PDF-Datei auf eine der beiden Arten anzeigen oder herunterladen, d. H. Indem Sie sie im eingebauten Gerätebrowser oder im Webview öffnen und in Ihre App einbetten.

Um das pdf im Browser zu öffnen,

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(pdf_url));
startActivity(browserIntent);

Statt in Webview zu öffnen,

 Webview webView = (WebView) findViewById(R.id.webView1);
 webView.getSettings().setJavaScriptEnabled(true);
 webView.loadUrl(pdf_url);
41
Akanksha Hegde

Die beste Vorgehensweise ist, Ihre Intent vor dem Start in Chooser umzuwandeln. Es bietet Benutzern ein integriertes Anwendungsauswahldialogfeld und vermeidet ActivityNotFoundException 

Hier ein kleines Beispiel:

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

Es ist möglich, PackageManager zu fragen, ob diese Intent die entsprechende Behandlung Activity hat oder nicht.

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

sie können PDF in der Webansicht wie folgt anzeigen

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

sie können pdf in Webview so anzeigen

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

Quellcode von hier herunterladen ( Öffne Pdf von URL in Android programmatisch )

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

Ich sehe, dass Sie diese Methode versuchen, den Datentyp zu definieren:

Intent intent = new Intent();
intent.setDataAndType(Uri.parse(url), "application/pdf");
startActivity(intent);

aber es wird verursachen:

ActivityNotFoundException: Es wurde keine Aktivität zum Behandeln der Absicht gefunden

Verwenden Sie eine Methode ohne die Typdefinition und es wird perfekt funktionieren:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
2
Elenasys

Der tatsächliche Fehler

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 
}

Das sagt:

  1. Sie "broadcast" und beabsichtigen, das System eine PDF-Datei öffnen zu lassen
  2. Das System findet keine registrierte Anwendung, um mit diesem Dateityp umgehen zu können (PDF).

Sie benötigen lediglich einen PDF viewer.

Lösung

Holen Sie sich eine PDF reader-App oder verwenden Sie die Lösung von @ Mahendra.

2
shkschneider

sie können dies versuchen. Es funktioniert sowohl für .pdf als auch für .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

Mit kotlin mit anko einfach anrufen

 context.browse(PDF_URL)

um eine doc-datei zu öffnen, werden sie von ihrem browser zur doc viewer app weitergeleitet.

Wenn Sie Google Text & Tabellen verwenden möchten, fügen Sie Ihre PDF-URL wie folgt hinzu:

"http://docs.google.com/viewer?url=$PDF_URL"
0
Aziz