簡體   English   中英

Android WebView不顯示PDF

[英]Android WebView does not display PDF

我已經花了數小時進行搜索和嘗試,但是仍然無法正常工作。 我正在嘗試在fragmentWebView內部顯示PDF文件。

在開始時,您會看到一條帶有Google加載圓圈的小行。
屏幕截圖和加載線

加載所有內容后,WebView僅顯示空白屏幕。

這是我的代碼片段.java:

final View webViewLayout = layoutInflater.inflate(R.layout.webview_empty, null);
    linearLayout.addView(webViewLayout);
    WebView webview = (WebView) linearLayout.findViewById(R.id.webview);
    String myPdfUrl = "gymnasium-wandlitz.de/vplan/vplan.pdf";
    //String url = "http://staglay.com/pdfjs/web/viewer.html";

    webview.getSettings().setJavaScriptEnabled(true);
    String url = "http://docs.google.com/viewer?embedded=true&url="+myPdfUrl;
    webview.setWebViewClient(new MyWebViewClient());
    webview.loadUrl(url);

而我的webview xml:

<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>

這是我的Logcat:

09-13 13:01:08.299 8501-8501/de.toeducate.tosub I/art: Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.ServiceWorkerControllerAdapter>
09-13 13:01:08.299 8501-8501/de.toeducate.tosub I/art: Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.ServiceWorkerControllerAdapter>
09-13 13:01:08.302 8501-8501/de.toeducate.tosub I/art: Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.TokenBindingManagerAdapter>
09-13 13:01:08.302 8501-8501/de.toeducate.tosub I/art: Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.TokenBindingManagerAdapter>
09-13 13:01:08.308 8501-8501/de.toeducate.tosub I/cr_LibraryLoader: Time to load native libraries: 1 ms (timestamps 5927-5928)
09-13 13:01:08.308 8501-8501/de.toeducate.tosub I/cr_LibraryLoader: Expected native library version number "52.0.2743.98", actual native library version number "52.0.2743.98"
09-13 13:01:08.319 8501-8501/de.toeducate.tosub V/WebViewChromiumFactoryProvider: Binding Chromium to main looper Looper (main, tid 1) {a6e1879}
09-13 13:01:08.319 8501-8501/de.toeducate.tosub I/cr_LibraryLoader: Expected native library version number "52.0.2743.98", actual native library version number "52.0.2743.98"
09-13 13:01:08.319 8501-8501/de.toeducate.tosub I/chromium: [INFO:library_loader_hooks.cc(143)] Chromium logging enabled: level = 0, default verbosity = 0
09-13 13:01:08.331 8501-8501/de.toeducate.tosub I/cr_BrowserStartup: Initializing chromium process, singleProcess=true
09-13 13:01:08.389 8501-10510/de.toeducate.tosub W/cr_media: Requires BLUETOOTH permission
09-13 13:01:08.427 8501-10516/de.toeducate.tosub D/ConnectivityManager.CallbackHandler: CM callback handler got msg 524290
09-13 13:01:08.438 8501-8501/de.toeducate.tosub W/cr_AwContents: onDetachedFromWindow called when already detached. Ignoring
09-13 13:01:08.453 8501-8501/de.toeducate.tosub I/cr_Ime: ImeThread is not enabled.
09-13 13:01:08.477 8501-8501/de.toeducate.tosub W/cr_AwContents: onDetachedFromWindow called when already detached. Ignoring
09-13 13:01:08.480 8501-8501/de.toeducate.tosub I/cr_Ime: ImeThread is not enabled.
09-13 13:01:08.504 8501-10516/de.toeducate.tosub D/ConnectivityManager.CallbackHandler: CM callback handler got msg 524290
09-13 13:01:08.527 8501-10523/de.toeducate.tosub E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
09-13 13:01:08.547 8501-10523/de.toeducate.tosub W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
09-13 13:01:08.557 8501-10523/de.toeducate.tosub W/VideoCapabilities: Unrecognized profile/level 0/0 for video/mpeg2
09-13 13:01:08.557 8501-10523/de.toeducate.tosub W/VideoCapabilities: Unrecognized profile/level 0/2 for video/mpeg2
09-13 13:01:08.557 8501-10523/de.toeducate.tosub W/VideoCapabilities: Unrecognized profile/level 0/3 for video/mpeg2
09-13 13:01:08.572 8501-10523/de.toeducate.tosub I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es
09-13 13:01:08.619 8501-8501/de.toeducate.tosub W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 8501
09-13 13:01:08.620 8501-8501/de.toeducate.tosub W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 8501
09-13 13:01:08.904 8501-8501/de.toeducate.tosub W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 8501
09-13 13:01:09.039 8501-8501/de.toeducate.tosub W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 8501

更新:

在onCreateView方法中:

View view=inflater.inflate(R.layout.fragment_crime_list,container,false);
        LinearLayout linearLayout = (LinearLayout)view.findViewById(R.id.linearLayout);
        View webViewLayout = LayoutInflater.from(getActivity()).inflate(R.layout.webview, linearLayout,false);



        WebView webView = (WebView) webViewLayout.findViewById(R.id.webview1);
        linearLayout.addView(webView);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        String myPdfUrl = "gymnasium-wandlitz.de/vplan/vplan.pdf";
        String url = "https://docs.google.com/viewer?embedded=true&url="+myPdfUrl;
        webView.loadUrl(url);
WebView webview = (WebView) linearLayout.findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true); 
String pdf = "gymnasium-wandlitz.de/vplan/vplan.pdf";
webview.loadUrl("http://drive.google.com/viewerng/viewer?embedded=true&url=" + pdf);

更新XML文件

<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

在此處鏈接以獲取更多信息: 幫助

我建議您采用另一種方式-省略Google文檔。

看一下PdfViewer項目。 assets/pdfviewer/所有文件復制到您的項目中。

將一個文件index.html添加到同一文件夾中:

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="file:///android_asset/pdfviewer/minimal.css"/>
       <script type="text/javascript" src="file:///android_asset/pdfviewer/compatibility.js"></script>
      <!--  horrible hack needs fix-->

    <script type="text/javascript">
        var url = 'THE_FILE';
    </script>

</head>
<body>

    <div>
        <canvas id="the-canvas"/>
    </div>

<!-- Use latest PDF.js build from Github -->
    <script type="text/javascript" src="file:///android_asset/pdfviewer/pdf.js"></script>
    <script type="text/javascript" src="file:///android_asset/pdfviewer/customview.js"></script>

</body>
</html>

將.pdf文件下載到您的手機並獲取其Uri

然后設置Webview:

WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN)
{
    settings.setAllowFileAccessFromFileURLs(true);
    settings.setAllowUniversalAccessFromFileURLs(true);
}
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setWebViewClient(new WebViewClient());

並將文件加載到WebView

    Uri path = Uri.parse(/**/);
    InputStream ims = null;
    FileOutputStream fileOutputStream = null;
    try {
        ims = getAssets().open("pdfviewer/" + INDEX_HTML);
        String line = getStringFromInputStream(ims);
        if (line.contains(FILE_INDICATOR)) {
            line = line.replace(FILE_INDICATOR, path.toString());

            fileOutputStream = openFileOutput(INDEX_HTML, Context.MODE_PRIVATE);
            fileOutputStream.write(line.getBytes());
            fileOutputStream.close();
        }
    } catch (IOException e) {
        try {
            if (ims != null) {
                ims.close();
            }
            if (fileOutputStream != null) {
                fileOutputStream.close();
            }
        } catch (IOException inputOutputException) {
            return;
        }
        return;
    }

    runOnUiThread( new Runnable() {
        @Override
        public void run() {
            webView.loadUrl("file://" + getFilesDir() + "/" + INDEX_HTML);
            webView.scrollTo(webView.getWidth() / 2, 0);
        }
    });
String myPdfUrl = "http://gymnasium-wandlitz.de/vplan/vplan.pdf";
webview.getSettings().setJavaScriptEnabled(true);
String url = "http://docs.google.com/viewer?embedded=true&url="+myPdfUrl;
webview.setWebViewClient(new MyWebViewClient());
webview.loadUrl(url);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM