我试图在我的应用程序中拦截嵌入式webvIEw中的mailto:链接.我所拥有的工作正常,除非用户按下链接时返回应用程序时模糊.这是我在WebVIEwClIEnt中所做的事情
@OverrIDepublic 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’参数:
@OverrIDepublic 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<String> to = new ArrayList<String>(); List<String> cc = new ArrayList<String>(); List<String> bcc = new ArrayList<String>(); 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;}
总结 以上是内存溢出为你收集整理的如何处理mailto:在android webview中全部内容,希望文章能够帮你解决如何处理mailto:在android webview中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)