2012-02-04 16 views
5

私はWebサーバー上でホストされているPDF文書のリストを表示するWebアプリケーションを開発しました。このアプリはアンドロイド用webviewアプリに組み込まれていますが、携帯電話でアプリを読み込むと、PDFリンクを選択しても何もしません。私は間違って何をしていますか?おかげwebviewはリンククリックでpdfファイルをロードしません

HERESに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

あなたがそれをロードするためにGoogleドキュメントを使用することができます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); 

注:

+2

私はあなたにwan'tていない場合、これは素晴らしいソリューションであるアクティビティコード – Chris

+1

に書き込まれたレンダリングインストール済みのPDFビューアやPDFにPDFを読み込む代わりに、googleDocsビューアを使用しないことを好むだろうPDFを表示するには、あなたのアプリからユーザをバンプしてください –

0

使用loadurl別のオーバーロードされたメソッドマニフェストファイルでandroid.permission.INTERNETあなたを必要とし...、インターネット許可

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

ユーザーがWebビュー内のページでPDFリンクをクリックすると、そのファイルが外部のPDFアプリケーションで開きます。

+1

私のために働く! url.endsWith( ".pdf") – Alex

+0

オープンしようとする前に意図があるかどうかを確認してください。 –

3

これは私が使用するソリューションです。

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

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

あなたがWebクライアントでshouldOverrideUrlLoadingメソッドをオーバーライドする必要があります。私はバックアップとして意図やGoogleドキュメントの組み合わせで、このアプローチを使用します。

/* 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アクセス方法に変更する必要がありますが、他の可能性があります。

また、API24以降、オーバーライドできる方法は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

これは間違いなく皆さんを助けてくれるはずです.2011年11月28日にチェックしました。 –

+0

感謝 - 私のための作品! "urlIsPDF"では私が使った:url.endsWith( "。pdf") - Alex –

関連する問題