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)
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);
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;
}
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);
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);
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);
}
});
}
}
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);
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:
broadcast
" und beabsichtigen, das System eine PDF
-Datei öffnen zu lassenPDF
).Sie benötigen lediglich einen PDF viewer
.
Lösung
Holen Sie sich eine PDF reader
-App oder verwenden Sie die Lösung von @ Mahendra.
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);
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"