2

I have spent hours of searching and trying, but it does not work anyway. I am trying to display a PDF-File with inside of a WebView inside of a fragment.

At the beginning you can see a small line with the Google loading circle in it.
Screenshot with loading line

After everything is loaded, the WebView only shows a blank screen.

Here is my code fragment.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);

And my 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"/>

Here is my 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
Pepe Bellin
  • 85
  • 1
  • 12

4 Answers4

1

Update:

In onCreateView method:

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);
Manish Jain
  • 2,139
  • 19
  • 15
0
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);

Update the XML file

<?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"/>

Link for more here: help

Community
  • 1
  • 1
W4R10CK
  • 5,502
  • 2
  • 19
  • 30
0

I suggest you another way - omitting Google Docs.

Have a look at the PdfViewer project. Copy all files from assets/pdfviewer/ into your project.

Add one file index.html into the same folder:

<!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>

Download the .pdf file to your phone and get the Uri of it.

Then setup the 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());

And load the file into 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);
        }
    });
R. Zagórski
  • 20,020
  • 5
  • 65
  • 90
-1
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);
Ganesh Kanna
  • 2,269
  • 1
  • 19
  • 29