Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

handling links in a webview

I have my WebView loading all links inside the webview - but when I select an email link it tries to load it in the webview instead of launching an email app on the phone. How do I resolve that? the links are mailto://[email protected]

Here is my code - the WebView itself works right and everything loads inside the webview, including mailto:, etc. Need the mailto links to load elsewhere

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;         }     }} 
like image 483
Jeremy Avatar asked Jan 24 '11 23:01

Jeremy


People also ask

How do I open a link in WebView?

Within the shouldOverrideUrlLoading() method simply get the URL from the request and pass into the Intent. See the full example.

What is a WebView link?

WebView is a view that display web pages inside your application. You can also specify HTML string and can show it inside your application using WebView. WebView makes turns your application to a web application.

Is WebView slower than browser?

Web View is slower on both as compared to native android browser.


1 Answers

I assume you are already overriding shouldOverrideUrlLoading, you just need to handle this special case.

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; } 
like image 76
Nathan Schwermann Avatar answered Sep 30 '22 08:09

Nathan Schwermann