android webview mailto,Webview email link (mailto)
问题
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)相关推荐
- Android WebView(一) WebView详解
WebView,在Android开发中,我们总是会遇到,它是Google封装的,使用WebKit渲染引擎加载显示网页.接下来,我们就详细看看WebView的介绍以及使用.如果你想了解WebView主要 ...
- Android API中文文档(111) —— MailTo
一.结构 public class MailTo extends Object java.lang.Object android.net.MailTo 二.类概述 MailTo URL解析器.这个类解 ...
- android Echart力图webview,包含双向交互内容
android Echart力图webview,包含双向交互内容 H5界面代码 <!DOCTYPE html> <html> <head><title> ...
- android webview详情,Android中的WebView详细介绍
Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化 ...
- android动态设置错误页面,Android中替换WebView加载网页失败时的页面
我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...
- android学习之WebView
2019独角兽企业重金招聘Python工程师标准>>> WebView是android.webkit包下的一个组件,能用来显示网页. WebView默认是不带地址栏和加进度条的,单单 ...
- Android开发之WebView的开发使用(源代码分享)
如果我们想提供一个web应用程序(或只是一个网页)作为客户端应用程序的一部分,我们可以使用WebView.WebView类是Android的视图类的扩展,它允许您显示web页面的一部分活动布局.担它不 ...
- 解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
解决 android 高低版本 webView 里内容 自适应屏幕的终极方法 参考文章: (1)解决 android 高低版本 webView 里内容 自适应屏幕的终极方法 (2)https://ww ...
- Android中脱离WebView使用WebSocket实现群聊和推送功能
WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...
最新文章
- 海南岛渔民捞出“鱼雷”,竟是他国间谍机器人
- xamarin_如何实现声明性Xamarin表单验证
- lisp用entmake生产圆柱体_铝型材挤压生产金属流动与模具分析
- 电脑老是自动重启怎么回事??
- CATIA 鼠标快捷键组合
- Redis过期策略详解
- html密码查看器,浏览器密码查看工具(WebBrowserPassView)
- 北京调频(FM)无线广播发射频率/频道表 (转载)
- 泛微云桥e-Bridge-任意文件读取漏洞
- ES6三种暴露方法详解
- 一文掌握Pandas可视化图表
- 广发样样行这样做可以提额
- 蓝牙连接打印机打印资产标签.
- live2d_Live2D解锁丨SR羁绊复刻,生日定制服装上架!
- 万洲金业:白银继续走高,预期缓慢冲高
- 玩法专利获批,发布4年《Beat Saber》为何持续火爆
- matlab景深合成算法,科普向 篇五:Helicon Focus让景深合成变简单!
- python机器学习算法(赵志勇)学习笔记(基础部分)
- python bs4 csv requests 爬虫 爬取携程火车票网址信息并保存
- maven dependence 的optional 和 exclusions 标签详解