2012-02-04 35 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

相關問題