2017-06-08 37 views
3

我加載頁面的網頁視圖內與PDF負載的Android的WebView

webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl("https://www.xxxxxxxxx/howtoguide.aspx"); 

然後web視圖裏面我有幾個功能,在此web視圖點擊下面

  @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      if (url.contains("[email protected]")) { 
       final Intent eIntent = new Intent(
         android.content.Intent.ACTION_SEND); 
       eIntent.setType("plain/text"); 
       eIntent.putExtra(android.content.Intent.EXTRA_EMAIL, 
         new String[]{"xxxxxx"}); 
       eIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
         ""); 
       eIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
         "Text to be send"); 
       startActivity(Intent.createChooser(eIntent, 
         "Send mail...")); 

      } else if (url.startsWith("tel:")) { 

      Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
       startActivity(intent); 
       view.reload(); 

      } else if (url.contains(".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 
      //} 
      // view.loadUrl("https://docs.google.com/viewer?url=" + url); 
       view.loadUrl("http://drive.google.com/viewerng/viewer?embedded=true&url=" + url);    
      } else { 
       view.loadUrl(url); 
      } 
      return true; 
     } 

事件有一個click事件爲PDF。所以,如果我點擊這個PDF不加載

+0

您確定PDF文件鏈接中包含'.pdf'嗎?你也可以在你的'shouldOverrideUrlLoading'方法中設置斷點,然後使用debug檢查你自己的錯誤。 –

+0

是啊,它有.pdf。我已經補充說,也沒有工作 – AngelJanniee

回答

1
view.loadUrl("http://drive.google.com/viewerng/viewer?embedded=true&url=" + url); 

調用這個方法爲我工作,當我打電話給web視圖裏面加載。所以這個webview佈局高度應該是match_parent。

鏈接點擊打開瀏覽器,然後簡單地通過URL像下面的代碼。

Intent intent = new Intent(Intent.ACTION_VIEW); 
       intent.setData(Uri.parse(url)); 
       startActivity(intent); 

這是解決了我的問題。

1

請檢查下面的示例代碼爲您的要求

private void init() 
{ 
    WebView webview = (WebView) findViewById(R.id.webview); 
    WebSettings settings = webview.getSettings(); 
    settings.setJavaScriptEnabled(true); 
    webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

    MyWebViewClient webViewClient = new MyWebViewClient(this, webview); 
    webViewClient.loadUrl(YOUR_URL); 
} 

private class MyWebViewClient extends WebViewClient 
{ 
    private static final String TAG = "MyWebViewClient"; 
    private static final String PDF_EXTENSION = ".pdf"; 
    private static final String PDF_VIEWER_URL = "https://drive.google.com/viewerng/viewer?embedded=true&url="; 

    private Context mContext; 
    private WebView mWebView; 
    private ProgressDialog mProgressDialog; 
    private boolean isLoadingPdfUrl; 

    public MyWebViewClient(Context context, WebView webView) 
    { 
     mContext = context; 
     mWebView = webView; 
     mWebView.setWebViewClient(this); 
    } 

    public void loadUrl(String url) 
    { 
     mWebView.stopLoading(); 

     if (!TextUtils.isEmpty(url)) 
     { 
      isLoadingPdfUrl = isPdfUrl(url); 
      if (isLoadingPdfUrl) 
      { 
       mWebView.clearHistory(); 
      } 

      showProgressDialog(); 
     } 

     mWebView.loadUrl(url); 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView webView, String url) 
    { 
     return shouldOverrideUrlLoading(url); 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public void onReceivedError(WebView webView, int errorCode, String description, String failingUrl) 
    { 
     handleError(errorCode, description.toString(), failingUrl); 
    } 

    @TargetApi(Build.VERSION_CODES.N) 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request) 
    { 
     final Uri uri = request.getUrl(); 
     return shouldOverrideUrlLoading(webView, uri.toString()); 
    } 

    @TargetApi(Build.VERSION_CODES.N) 
    @Override 
    public void onReceivedError(final WebView webView, final WebResourceRequest request, final WebResourceError error) 
    { 
     final Uri uri = request.getUrl(); 
     handleError(error.getErrorCode(), error.getDescription().toString(), uri.toString()); 
    } 

    @Override 
    public void onPageFinished(final WebView view, final String url) 
    { 
     Log.i(TAG, "Finished loading. URL : " + url); 
     dismissProgressDialog(); 
    } 

    private boolean shouldOverrideUrlLoading(final String url) 
    { 
     Log.i(TAG, "shouldOverrideUrlLoading() URL : " + url); 

     if (url.contains("[email protected]")) 
     { 
      Intent eIntent = new Intent(android.content.Intent.ACTION_SEND); 
      eIntent.setType("plain/text"); 
      eIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"xxxxxx"}); 
      eIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, ""); 
      eIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Text to be send"); 
      startActivity(Intent.createChooser(eIntent, "Send mail...")); 
      return true; 
     } 
     else if (url.startsWith("tel:")) 
     { 
      Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 
     else if (!isLoadingPdfUrl && isPdfUrl(url)) 
     { 
      mWebView.stopLoading(); 

      final String pdfUrl = PDF_VIEWER_URL + url; 

      new Handler().postDelayed(new Runnable() 
      { 
       @Override 
       public void run() 
       { 
        loadUrl(pdfUrl); 
       } 
      }, 300); 

      return true; 
     } 

     return false; // Load url in the webView itself 
    } 

    private void handleError(final int errorCode, final String description, final String failingUrl) 
    { 
     Log.e(TAG, "Error : " + errorCode + ", " + description + " URL : " + failingUrl); 
    } 

    private void showProgressDialog() 
    { 
     dismissProgressDialog(); 
     mProgressDialog = ProgressDialog.show(mContext, "", "Loading..."); 
    } 

    private void dismissProgressDialog() 
    { 
     if (mProgressDialog != null && mProgressDialog.isShowing()) 
     { 
      mProgressDialog.dismiss(); 
      mProgressDialog = null; 
     } 
    } 

    private boolean isPdfUrl(String url) 
    { 
     if (!TextUtils.isEmpty(url)) 
     { 
      url = url.trim(); 
      int lastIndex = url.toLowerCase().lastIndexOf(PDF_EXTENSION); 
      if (lastIndex != -1) 
      { 
       return url.substring(lastIndex).equalsIgnoreCase(PDF_EXTENSION); 
      } 
     } 
     return false; 
    } 
} 

結帳處理重定向URL和打開的PDF不用下載,web視圖中的示例代碼。 https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

+0

它也不會加載到我.. – AngelJanniee

+0

新的處理程序()。postDelayed(新的Runnable(){ @Override 公共 無效的run(){ web視圖 後爲靜態這個PDF字符串。 loadUrl(http://docs.google.com/gview?embedded=true&url=「+ url); } },300); 即使我直接添加該鏈接也不起作用 – AngelJanniee

+0

如果它可能可以共享url? –

0

使用這些方法需要登錄Google。

其它方式使用pdf.js

您必須保存PDF文件到SD卡和負載的web視圖。

的pdfjs文件添加到您的資產目錄

else if (url.contains(".pdf")) 
     { 
      File file = new File(Environment.getExternalStorageDirectory() + "/test.pdf"); 

    view.loadUrl("file:///android_asset/pdfjs/web/viewer.html?file=" + file.getAbsolutePath() + "#zoom=page-width"); 
     } 

Full sample project

+0

最初我已經將網址加載到網頁視圖中,然後在該網頁視圖中包含PDF網址。所以如果我點擊鏈接需要打開PDF。我不明白你的答案。 – AngelJanniee

+0

您必須下載文件並在webview中顯示。 –

+0

可以請你解釋一下嗎? – AngelJanniee