2012-02-04 32 views
5

我已经开发了显示托管的Web服务器上的PDF文档列表的web应用程序的PDF文件。这个应用程序中嵌入针对Android网页视图的应用然而,当我打开我的手机上的应用程序,一个PDF链接选择什么都不做。我究竟做错了什么?由于网页流量将不会加载的链接点击

继承人的Java代码:

package com.hellowebview; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class HellowebviewActivity extends Activity { 
/** Called when the activity is first created. */ 

private WebView mWebView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mWebView = (WebView) findViewById(R.id.webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.loadUrl("http://aipnz.webs.com"); 
    mWebView.setWebViewClient(new HelloWebViewClient()); 
    mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

} 
private class HelloWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView webview, String url) 
    { 
     webview.loadUrl(url); 
     return true; 
    } 
} 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) 
    { 
     mWebView.goBack(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
} 

回答

12

如果要加载PDF,您可以使用谷歌文件加载它。

String googleDocs = "https://docs.google.com/viewer?url="; 
String pdf_url = "http://kronox.org/documentacion/Hello.Android.new.pdf"; 

webView.loadUrl(googleDocs + pdf_url); 

注意:您需要android.permission.INTERNET对清单文件

+2

我宁愿不使用googleDocs观众,而不是加载在安装PDF阅读器或PDF格式的PDF渲染写进活动代码 – Chris 2012-02-25 08:49:05

+1

这是一个很好的解决方案,如果你不wan't到凹凸用户从您的应用程序中查看PDF – 2015-10-30 15:13:51

0

使用使用loadURL另一重载方法......写网络许可

6

只需创建一个在您shouldOverrideUrlLoading方法的意图:

@Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (urlIsPDF(url)){ 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.parse(url), "application/pdf"); 
      try{ 
       view.getContext().startActivity(intent); 
      } catch (ActivityNotFoundException e) { 
       //user does not have a pdf viewer installed 
      } 
     } else { 
      webview.loadUrl(url); 
     } 
     return true; 
    } 

然后,无论何时用户点击您网页内的网页中的PDF链接,该文件都会在外部PDF应用中打开。

+1

对我的作品!对于“urlIsPDF”我用:url.endsWith(“PDF”) – Alex 2017-06-01 15:55:57

+0

只是检查包装Manager如果意图试图打开它 – 2017-08-23 13:09:09

3

这是我使用的解决方案:

@Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.endsWith(".pdf")){ 
      String pdfUrl = googleDocs + url; 
      view.loadUrl(pdfUrl); 
     } else { 
      view.loadUrl(url); 
     } 
     return true; 
    } 

private final String googleDocs = "https://docs.google.com/viewer?url="; 
1

你必须覆盖的WebClient shouldOverrideUrlLoading方法。我使用意图和谷歌文件的组合,这种方法作为备份:

/* You might want to move this string definition somewhere else */ 
final String googleDocs = "https://docs.google.com/viewer?url="; 

WebView webView = new WebView(getContext()); 
//webView.getSettings().setJavaScriptEnabled(true); 
webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView webView, String url) { 
     if (url.endsWith(".pdf")) { 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.parse(url), "application/pdf"); 
      /* Check if there is any application capable to process PDF file. */ 
      if (intent.resolveActivity(getPackageManager()) != null) { 
       startActivity(intent); 
      } else { 
       /* If not, show PDF in Google Docs instead. */ 
       view.loadUrl(googleDocs + url); 
      } 
     } else { 
      webView.loadUrl(url); 
     } 
     return true; 
    } 
}); 

您可能需要更改传递上下文和访问startActivity方法,但除此之外,它应该运行,因为它是。

还要注意,由于API 24,有2种shouldOverrideUrlLoading方法,你可以重写。因为它是从@CommonsWare说here,这是确定覆盖的方法已过时。

2
webView.setWebViewClient(new WebViewClient() { 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.endsWith(".pdf")) { 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.parse(url), "application/pdf"); 
      try { 
       view.getContext().startActivity(intent); 
      } catch (ActivityNotFoundException e) { 
       //user does not have a pdf viewer installed 
      } 
     } else { 
      webView.loadUrl(url); 
     } 

     return true; 
    } 
} 
+0

这肯定会帮助你们之前是可用的,我检查了它在2017年11月28日,其工作 – 2017-11-29 07:52:33

+0

谢谢 - 适合我!对于我使用的“urlIsPDF”:url.endsWith(“。pdf”) - Alex – 2017-11-29 07:52:45

相关问题