現在、私はpdf url
を持っています、そして、単にそれを開くために意図を使用したいのですが、url
をintent
に入れた場合、それは機能しません
私のコードはこのようなもので、常に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));
}
また、私はgoolge docアプローチを試しましたが、私のクライアントはこれを拒否するので、この方法を使用していません
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);
手伝ってくれてありがとう
Log cat error 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)
PDFを表示またはダウンロードするには、2つの方法のいずれかを使用します。つまり、デバイスの組み込みブラウザーで開くか、アプリに埋め込むことでWebビューで開きます。
ブラウザでPDFを開くには、
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(pdf_url));
startActivity(browserIntent);
代わりに、webviewで開くには、
Webview webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(pdf_url);
ベストプラクティスは、開始前にIntent
をChooser
にラップすることです。ユーザーに組み込みのアプリケーション選択ダイアログを提供し、ActivityNotFoundException
を避けます
ここに小さな例があります:
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);
PackageManager
が適切かどうかを確認することは可能ですIntent
はActivity
を適切に処理します。
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;
}
次のようなWebビューでPDFを表示できます
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse( "http://docs.google.com/viewer?url=" + pdfLink), "text/html");
startActivity(intent);
このようにwebviewでpdfを表示できます
WebView webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginsEnabled(true);
webView.loadUrl("https://docs.google.com/viewer?"+pdf_url);
ここからソースコードをダウンロードします( RLからPDFを開くAndroidプログラムで )
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);
}
});
}
}
データ型を定義するこのメソッドを試していることがわかります。
Intent intent = new Intent();
intent.setDataAndType(Uri.parse(url), "application/pdf");
startActivity(intent);
しかし、それは以下を引き起こします:
ActivityNotFoundException:インテントを処理するアクティビティが見つかりません
型定義なしでメソッドを使用すると、完全に機能します。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
実際のエラー
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
}
これは次のことを意味します:
broadcast
」と、システムがPDF
ファイルを開こうとする意図PDF
)を処理できるように登録されたアプリケーションを検出しません。必要なのはPDF viewer
何らかの種類。
ソリューション
入手する PDF reader
appまたは@Mahendraのソリューションを使用します。
これを試すことができます。 。pdfと。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);
anko を使用するkotlinで、単に呼び出す
context.browse(PDF_URL)
ドキュメントファイルを開くには、ブラウザがドキュメントビューアーアプリにリダイレクトします。
Google Docsを使用する場合は、pdf URLを次のように追加します。
"http://docs.google.com/viewer?url=$PDF_URL"