2012-02-04 46 views
5

Tôi đã phát triển một ứng dụng web hiển thị danh sách tài liệu pdf được lưu trữ trên máy chủ web. Ứng dụng này được nhúng trong một ứng dụng webview cho android tuy nhiên khi tôi tải các ứng dụng trên điện thoại của tôi, lựa chọn một liên kết pdf không có gì. Tôi đang làm gì sai? Cảm ơnwebview sẽ không tải các tệp pdf trên liên kết, hãy nhấp vào

Heres mã 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); 
} 
} 

Trả lời

12

Nếu bạn muốn tải pdf bạn có thể sử dụng tài liệu của Google để tải nó.

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

webView.loadUrl(googleDocs + pdf_url); 

Chú ý: Bạn cần android.permission.INTERNET trong tập tin Manifest

+2

Tôi không muốn sử dụng trình xem googleDocs, thay vào đó tải PDF trong trình xem PDF được cài đặt hoặc PDF render được viết vào mã hoạt động – Chris

+1

đây là giải pháp tuyệt vời nếu bạn không đẩy người dùng ra khỏi ứng dụng của bạn để xem PDF –

0

sử dụng loadurl khác phương pháp quá tải ... và viết phép internet

6

Chỉ cần tạo một Intent trong phương pháp shouldOverrideUrlLoading của bạn:

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

Và sau đó bất cứ khi nào người dùng nhấp vào liên kết PDF trong trang trong chế độ xem web của bạn, tệp sẽ mở trong ứng dụng PDF bên ngoài.

+1

Làm việc cho tôi !. Đối với "urlIsPDF" tôi đã sử dụng: url.endsWith (". Pdf") – Alex

+0

Chỉ cần kiểm tra trình quản lý bao bì nếu có sẵn trước khi cố mở nó –

3

Đây là giải pháp tôi sử dụng:

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

với

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

Bạn cần phải ghi đè shouldOverrideUrlLoading phương pháp trong WebClient. Tôi sử dụng phương pháp này với sự kết hợp về ý định và Google Docs là một bản sao lưu:

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

Bạn có thể cần phải thay đổi đi qua các bối cảnh và truy cập startActivity phương pháp, nhưng khác hơn là nó nên chạy vì nó là.

Cũng lưu ý rằng kể từ API 24, có 2 shouldOverrideUrlLoading phương pháp bạn có thể ghi đè. Vì được nêu là here từ @CommonsWare, bạn có thể ghi đè phương thức không dùng nữa.

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

điều này chắc chắn sẽ giúp tất cả các bạn, tôi đã kiểm tra nó vào ngày 28/11/2017, làm việc –

+0

thanks-Làm việc cho tôi !. Đối với "urlIsPDF" tôi đã sử dụng: url.endsWith (". Pdf") - Alex –

Các vấn đề liên quan