2016-09-13 133 views
0

我花费了数小时的搜索和尝试,但它无法正常工作。 我试图在fragment的内部显示一个WebView的PDF文件。Android WebView不显示PDF

在开始时,您可以看到一条带有Google加载圈的小行。
Screenshot with loading line

加载完毕后,WebView将只显示空白屏幕。

这里是我的代码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); 

我的网页流量的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 
+0

显示'webview_empty' XML文件e –

+0

@logo更新 –

+0

@PepeBellin我刚刚更新了我的代码,它不是代码,它的XML文件导致问题。 – W4R10CK

回答

1

更新:

在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); 
+0

这工作正常。 –

+0

不,它不工作,因为我有一个片段 –

+0

@PepeBellin:检查更新的答案 –

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

更新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"/> 

链接请见:help

+0

没有改变任何东西 –

+0

尝试'WebView的webview =(WebView)webViewLayout.findViewById(R.id.webview);' – W4R10CK

+0

仍然显示加载循环,最后一个空白屏幕 –

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

我建议你另一种方式 - 省略谷歌文档。

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

然后设置web视图:

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