2011-01-24 6 views
33

私はWebViewのすべてのリンクをwebviewに読み込んでいますが、電子メールリンクを選択すると、電話でメールアプリケーションを起動する代わりにwebviewにロードしようとします。どのように解決するのですか? - WebView自体はmailtoのリンクが他の場所でウェブビューのリンクを処理する

package com.apps.jerdog.crcc; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

@SuppressWarnings("unused") 
public class mainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    /**@Override */ 
    WebView webview; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     webview = (WebView) findViewById(R.id.webview); 
     webview.getSettings().setJavaScriptEnabled(true); 
     webview.getSettings().setSupportZoom(true); 
     webview.getSettings().setBuiltInZoomControls(true); 
     webview.setWebViewClient(new WebViewClient()); 
     webview.loadUrl("http://www.cedarridge.cc"); 
     } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { 
      webview.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
    private class myWebViewClient extends WebViewClient { 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      if (url.startsWith("mailto:") || url.startsWith("tel:")) { 
        Intent intent = new Intent(Intent.ACTION_VIEW, 
          Uri.parse(url)); 
        startActivity(intent); 
        } 
      view.loadUrl(url); 
      return true; 
     } 
    }} 
をロードする必要があるなどのmailto :,含むWebViewの、内側に右、すべての負荷を作品// [email protected]ここ

が私のコードです:リンクがmailtoのです

+0

これを試してください:http://stackoverflow.com/a/12478503/449410 – Gunanaresh

答えて

71

私はすでにshouldOverrideUrlLoadingをオーバーライドしていると仮定します。この特殊なケースを処理するだけです。ここでは、@schwizが提供する答えのオフに行く

mWebClient = new WebViewClient(){ 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if(url.startsWith("mailto:")){ 
       MailTo mt = MailTo.parse(url); 
       Intent i = newEmailIntent(MyActivity.this, mt.getTo(), mt.getSubject(), mt.getBody(), mt.getCc()); 
       startActivity(i); 
       view.reload(); 
       return true; 
      } 

       else{ 
        view.loadUrl(url); 
       } 
       return true; 
      } 
     }; 
    mWebView.setWebViewClient(mWebClient); 

    public static Intent newEmailIntent(Context context, String address, String subject, String body, String cc) { 
     Intent intent = new Intent(Intent.ACTION_SEND); 
     intent.putExtra(Intent.EXTRA_EMAIL, new String[] { address }); 
     intent.putExtra(Intent.EXTRA_TEXT, body); 
     intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
     intent.putExtra(Intent.EXTRA_CC, cc); 
     intent.setType("message/rfc822"); 
     return intent; 
} 
+0

「IntentSupportは解決できません」というメッセージが表示されます。ステートメント "mWebClient"、 "mWebView.setWebViewClient(mWebClient);"で "このトークンの後にVariableDeclaratorIdが必要です"というトークン "コード.... – Jerdog

+0

はここに私のコードのペーストビンです http://pastebin.com/qxWiQJGF – Jerdog

+0

IntentSupportはよく使われるインテントを作る私自身のユーティリティクラスです。ミスコードで編集したことは残念です。 http://pastebin.com/3LVE3S7F – schwiz

0
:::: 
:::: 

    webViewTerms = (WebView) v 
      .findViewById(R.id.webview_termsAndCond); 
    webViewTerms.setWebViewClient(new Client()); 
    webViewTerms.getSettings().setJavaScriptEnabled(true); 
    //webViewTerms.getSettings().setBuiltInZoomControls(true); 
    webViewTerms.loadUrl(getUrl()); //.loadUrl("https://www.google.com/"); 
:::: 
:::: 
:::: 
    private class Client extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 

      return true; 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      // TODO Auto-generated method stub 
      super.onPageFinished(view, url); 


     } 

    } 
4

クリーナー例です。 WebViewwebView命名されたと仮定:複数の電子メールアドレス、CC、BCC、件名、本文:

webView.setWebViewClient(new WebViewClient() { 
    // shouldOverrideUrlLoading makes this `WebView` the default handler for URLs inside the app, so that links are not kicked out to other apps. 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     // Use an external email program if the link begins with "mailto:". 
     if (url.startsWith("mailto:")) { 
      // We use `ACTION_SENDTO` instead of `ACTION_SEND` so that only email programs are launched. 
      Intent emailIntent = new Intent(Intent.ACTION_SENDTO); 

      // Parse the url and set it as the data for the `Intent`. 
      emailIntent.setData(Uri.parse(url)); 

      // `FLAG_ACTIVITY_NEW_TASK` opens the email program in a new task instead as part of this application. 
      emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      // Make it so. 
      startActivity(emailIntent); 
      return true; 
     } else { // Load the URL in `webView`. 
      webView.loadUrl(url); 
      return true; 
     } 
    } 
}); 

私はすべてのmailto:オプションでこれをテストしています。

関連する問題