我试图在我的应用程序中拦截嵌入式webview中的mailto:链接.我所拥有的工作正常,除非用户按下链接时返回应用程序时模糊.这是我在WebViewClient中所做的事情

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

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

url = url.replaceFirst("mailto:", "");

url = url.trim();

Intent i = new Intent(Intent.ACTION_SEND);

i.setType("plain/text").putExtra(Intent.EXTRA_EMAIL, new String[]{url});

context.startActivity(i);

return true;

}

context.findViewById(R.id.loadingBar).setVisibility(View.VISIBLE);

view.loadUrl(url);

return true;

}

如果我做一个view.reload()它确实解决了问题,但有没有更好的方法来修复它而不浪费带宽?我尝试了invalidate()但它没有用.

这是我正在谈论的一个例子

解决方法:

这是James Gray的答案的更强大版本.

它应该处理多个地址(以逗号分隔)和多个’cc’/’bcc’参数:

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url == null) {

return false;

}

if (url.startsWith("market://")) {

view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));

return true;

}

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

try {

List to = new ArrayList();

List cc = new ArrayList();

List bcc = new ArrayList();

String subject = null;

String body = null;

url = url.replaceFirst("mailto:", "");

String[] urlSections = url.split("&");

if (urlSections.length >= 2) {

to.addAll(Arrays.asList(urlSections[0].split(",")));

for (int i = 1; i < urlSections.length; i++) {

String urlSection = urlSections[i];

String[] keyValue = urlSection.split("=");

if (keyValue.length == 2) {

String key = keyValue[0];

String value = keyValue[1];

value = URLDecoder.decode(value, "UTF-8");

if (key.equals("cc")) {

cc.addAll(Arrays.asList(url.split(",")));

}

else if (key.equals("bcc")) {

bcc.addAll(Arrays.asList(url.split(",")));

}

else if (key.equals("subject")) {

subject = value;

}

else if (key.equals("body")) {

body = value;

}

}

}

}

else {

to.addAll(Arrays.asList(url.split(",")));

}

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);

emailIntent.setType("message/rfc822");

String[] dummyStringArray = new String[0]; // For list to array conversion

emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, to.toArray(dummyStringArray));

if (cc.size() > 0) {

emailIntent.putExtra(android.content.Intent.EXTRA_CC, cc.toArray(dummyStringArray));

}

if (bcc.size() > 0) {

emailIntent.putExtra(android.content.Intent.EXTRA_BCC, bcc.toArray(dummyStringArray));

}

if (subject != null) {

emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);

}

if (body != null) {

emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);

}

view.getContext().startActivity(emailIntent);

return true;

}

catch (UnsupportedEncodingException e) {

/* Won't happen*/

}

}

return false;

}

标签:android-webview,android

来源: https://codeday.me/bug/20190722/1497595.html

android webview mailto,如何处理mailto:在android webview中相关推荐

  1. 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 e ...

  2. Android 网络编程系列(3)WebView 详解

    前言 在上一篇关于WebView的文章中,介绍了 WebView 的基本使用方法.WebView 页面处理和历史记录以及和 JS 调用本地代码的相关内容.今天就在上一篇文章的基础上,补充一些 WebV ...

  3. 转 Android开发学习笔记:浅谈WebView

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 ...

  4. android 获取位置数据库,尝试从webview获取位置时,Android“SQLite数据库无法从/CachedGeoposition.db加载”错误...

    我正在创建一个使用webkit和chrome客户端的android应用程序.我希望能够在网页请求时获取当前位置.我设置的网页适用于普通浏览器就好了.然而,当我尝试访问该网页WebKit中,我不断收到此 ...

  5. Android开发之WebView加载html数据去除Webview滚动条的方法

    老套路看图: 这是通过webview加载HTML源码显示的网页:加载方法如下: webview.loadDataWithBaseURL(null, htmlData, "text/html& ...

  6. Android开发之带进度条的WebView

    老套路先看效果: 直接上代码: 区分java和kotlin版本 Java版本: package com.example.progresswebview;import android.os.Bundle ...

  7. Android开发继承webview,WebView如何从当前的Android主题继承颜色?

    此问题最初发布在谷歌版主上,用于上周举行的AndroidDev办公时间环聊.问题实际上是现场回答,如果你愿意,你可以在这里观看.我在这里发帖,因为他们似乎对它很感兴趣,而且我有更多的空间来详细阐述. ...

  8. android设置webview缓存目录,Android基础入门教程——7.5.5 WebView缓存问题

    Android基础入门教程--7.5.5 WebView缓存问题 Android基础入门教程 本节引言:现在很多门户类信息网站,比如虎嗅,ifanr,钛媒体等等的APP,简单点说是信息阅读类的APP, ...

  9. android 的导入crosswalk 用xwalkview 替换webview

    用过webvIew开发的各位伙伴应该知道,同样的html代码在ios手机上运行无压力,但是在android手机上运行,慢的要死.还会有各种奇怪的蛋碎问题.后来查阅了很多文章,决定使用crosswalk ...

最新文章

  1. Java Spring MVC项目搭建(三)——“Hello World”
  2. 设计模式-职责链模式
  3. 查看linux文件系统结构,如何查看Linux系统架构类型
  4. 数据结构(哈夫曼树,哈夫曼编码)入门篇,JAVA实现
  5. jax-rs jax-ws_快速浏览JAX-RS请求与方法匹配
  6. 2019大数据课程_根据数据,2019年最佳免费在线课程
  7. 好系统教你如何在Windows中更改文件夹的图标
  8. TCP连接的99号和110号错误
  9. linux学习第四周作业练习
  10. 【openMV】霍夫变换---直线提取
  11. vue 使用tracking.js开发人脸识别功能
  12. 3D角色遮挡住UI的实现,关于Stencil Buffer,描边,以及其他
  13. Java 驼峰命名转下划线命名(能正确处理连续HTTP等大写)
  14. 南京大学计算机信息安全专业,信息安全专业按实力划分为九类,看看你喜欢的院校属于哪一类...
  15. python 马赛克还原_python实现图片马赛克处理
  16. 教研室课题---卫星通信系统
  17. 【小样本分割 2020 TPAMI 】PFENet
  18. GBDT+XGBoost算法详解(下):XGBoost
  19. jquery表格隔行变色
  20. MySQL的批量更新和批量新增优化

热门文章

  1. 疯狂Java讲义(八)----第一部分
  2. 重写highlighted改变按钮的按下状态、
  3. Greenplum数据库源码学习——BackgroundWorker框架
  4. 蓝桥杯真题 包子凑数 c++代码实现 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有 N 种蒸笼,其中第 i种蒸笼恰好能放 Ai个包子。
  5. 【NOJ1144】【算法实验二】农场灌溉问题
  6. H3C Switch S1848G端口限速
  7. 2016 GIAC全球互联网架构大会圆满结束,全部PPT开放下载
  8. Android dependencies External Libraries 依赖包存放路径
  9. oracle dba_profile,Oracle之dba_profiles解析
  10. oracle dataguard 日志传输,dataguard不传输日志的问题