问题

I have a view and view the site has malito code to send email.

When I open the link opens in an error.

I want that when I open the link opens Gmail app or another email application.

Thanks to all helpers.

public class teacher extends Activity implements OnClickListener {

WebView webView;

final Activity activity = this;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.getWindow().requestFeature(Window.FEATURE_PROGRESS);

setContentView(R.layout.teacher);

webView = (WebView) findViewById(R.id.webView145);

webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("https://dl.dropboxusercontent.com/u/233211/%D7%A8%D7%A9%D7%99%D7%95%D7%9F/iWebKit%20demo/ther.html");

webView.setWebChromeClient(new WebChromeClient() {

public void onProgressChanged(WebView view, int progress) {

activity.setTitle("Loading...");

activity.setProgress(progress * 100);

if (progress == 100)

activity.setTitle(R.string.app_name);

} });

webView.setWebViewClient(new WebViewClient() {

@Override

public void onReceivedError(WebView view, int errorCode,

String description, String failingUrl) {

// Handle the error

}

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

return true; } });}

public void onBackPressed() {

if (webView.canGoBack()) {

webView.goBack();

} else {

Intent B = new Intent(this, MainActivity.class);

startActivity(B);

}}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (event.getAction() == KeyEvent.ACTION_DOWN) {

switch (keyCode) {

case KeyEvent.KEYCODE_BACK:

if (webView.canGoBack() == true) {

webView.goBack();

} else {

finish();

}return true;} }

return super.onKeyDown(keyCode, event);

}

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

}}

回答1:

You have to create a subclass of WebViewClient and override mailto URL loading. Example:

public class MyWebViewClient extends WebViewClient {

private final WeakReference mActivityRef;

public MyWebViewClient(Activity activity) {

mActivityRef = new WeakReference(activity);

}

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url.startsWith("mailto:")) {

final Activity activity = mActivityRef.get();

if (activity != null) {

MailTo mt = MailTo.parse(url);

Intent i = newEmailIntent(activity, mt.getTo(), mt.getSubject(), mt.getBody(), mt.getCc());

activity.startActivity(i);

view.reload();

return true;

}

} else {

view.loadUrl(url);

}

return true;

}

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

}

}

Then you have to set this custom WebViewClient to your WabView:

webView.setWebViewClient(new MyWebViewClient(activity);

回答2:

You should update your's WebViewClient with the following:

@SuppressWarnings("deprecation")

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

proceedUrl(view, Uri.parse(url))

return true;

}

@TargetApi(Build.VERSION_CODES.N)

@Override

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

proceedUrl(view, request.getUrl());

return true;

}

private void proceedUrl(View view, Uri uri){

if (uri.toString().startsWith("mailto:")) {

startActivity(new Intent(Intent.ACTION_SENDTO, uri));

} else if (uri.toString().startsWith("tel:")) {

startActivity(new Intent(Intent.ACTION_DIAL, uri));

} else {

view.loadUrl(uri.toString());

}

}

回答3:

Note : - After Android Nougat shouldOverrideUrlLoading is Deprecated

You need to use shouldOverrideUrlLoading along with shouldOverrideUrlLoading for better support.

Also, you might want to check if URL have mailto: or tel:, which are used in HTML5 to trigger mail client and phone dial respectively.

A complete solution will look like this now

@SuppressWarnings("deprecation")

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url.startsWith("mailto:")) {

//Handle mail Urls

startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse(url)));

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

//Handle telephony Urls

startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));

} else {

view.loadUrl(url);

}

return true;

}

@TargetApi(Build.VERSION_CODES.N)

@Override

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

final Uri uri = request.getUrl();

if (uri.toString().startsWith("mailto:")) {

//Handle mail Urls

startActivity(new Intent(Intent.ACTION_SENDTO, uri));

} else if (uri.toString().startsWith("tel:")) {

//Handle telephony Urls

startActivity(new Intent(Intent.ACTION_DIAL, uri));

} else {

//Handle Web Urls

view.loadUrl(uri.toString());

}

return true;

}

来源:https://stackoverflow.com/questions/18874282/webview-email-link-mailto

android webview mailto,Webview email link (mailto)相关推荐

  1. Android WebView(一) WebView详解

    WebView,在Android开发中,我们总是会遇到,它是Google封装的,使用WebKit渲染引擎加载显示网页.接下来,我们就详细看看WebView的介绍以及使用.如果你想了解WebView主要 ...

  2. Android API中文文档(111) —— MailTo

    一.结构 public class MailTo extends Object java.lang.Object android.net.MailTo 二.类概述 MailTo URL解析器.这个类解 ...

  3. android Echart力图webview,包含双向交互内容

    android Echart力图webview,包含双向交互内容 H5界面代码 <!DOCTYPE html> <html> <head><title> ...

  4. android webview详情,Android中的WebView详细介绍

    Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化 ...

  5. android动态设置错误页面,Android中替换WebView加载网页失败时的页面

    我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...

  6. android学习之WebView

    2019独角兽企业重金招聘Python工程师标准>>> WebView是android.webkit包下的一个组件,能用来显示网页. WebView默认是不带地址栏和加进度条的,单单 ...

  7. Android开发之WebView的开发使用(源代码分享)

    如果我们想提供一个web应用程序(或只是一个网页)作为客户端应用程序的一部分,我们可以使用WebView.WebView类是Android的视图类的扩展,它允许您显示web页面的一部分活动布局.担它不 ...

  8. 解决 android 高低版本 webView 里内容 自适应屏幕的终极方法

    解决 android 高低版本 webView 里内容 自适应屏幕的终极方法 参考文章: (1)解决 android 高低版本 webView 里内容 自适应屏幕的终极方法 (2)https://ww ...

  9. Android中脱离WebView使用WebSocket实现群聊和推送功能

    WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...

最新文章

  1. 海南岛渔民捞出“鱼雷”,竟是他国间谍机器人
  2. xamarin_如何实现声明性Xamarin表单验证
  3. lisp用entmake生产圆柱体_铝型材挤压生产金属流动与模具分析
  4. 电脑老是自动重启怎么回事??
  5. CATIA 鼠标快捷键组合
  6. Redis过期策略详解
  7. html密码查看器,浏览器密码查看工具(WebBrowserPassView)
  8. 北京调频(FM)无线广播发射频率/频道表 (转载)
  9. 泛微云桥e-Bridge-任意文件读取漏洞
  10. ES6三种暴露方法详解
  11. 一文掌握Pandas可视化图表
  12. 广发样样行这样做可以提额
  13. 蓝牙连接打印机打印资产标签.
  14. live2d_Live2D解锁丨SR羁绊复刻,生日定制服装上架!
  15. 万洲金业:白银继续走高,预期缓慢冲高
  16. 玩法专利获批,发布4年《Beat Saber》为何持续火爆
  17. matlab景深合成算法,科普向 篇五:Helicon Focus让景深合成变简单!
  18. python机器学习算法(赵志勇)学习笔记(基础部分)
  19. python bs4 csv requests 爬虫 爬取携程火车票网址信息并保存
  20. maven dependence 的optional 和 exclusions 标签详解

热门文章

  1. 万字长文概览深度学习的可解释性研究
  2. 机器人造iPhone,苹果奋斗八年,还是败给了富士康工人
  3. IDEA的这几个调试的骚操作,用了都说爽!
  4. 浪子回头,从学渣变成学霸,就了不起吗?
  5. python模块学习---cmd
  6. Django博客系统(首页文章数据展示)
  7. hdu1874(畅通工程续)
  8. 121. Best Time to Buy and Sell Stock
  9. Win8 Metro(C#)数字图像处理--2.52图像K均值聚类
  10. 百度搜索_如何打开Intellij IDEA的代码提示功能?