【问题标题】:mailto: links unsupported in Android?mailto:Android 中不支持的链接?
【发布时间】:2011-04-09 22:27:33
【问题描述】:

我没有真正的 Android 设备,所以我现在正在使用模拟器进行所有开发,mailto: web 链接在 Android 设备 2.1 及以下版本上真的不支持吗? 2.2 有效,但每次我在 1.6 或 2.1 上单击 mailto: 链接时,都会出现 [不支持的操作] 对话框。有真机的人想测试一下吗?

【问题讨论】:

  • Mailto 链接在哪里?在 Web 视图中?
  • 在手机浏览器中使用 10.0.2.2 访问 localhost。

标签: android mailto


【解决方案1】:

你必须在 WebViewClient 中自己处理

public class MyWebViewClient extends WebViewClient {
    Activity mContext;
    public MyWebViewClient(Activity context){
        this.mContext = context;
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {     
        if(url.startsWith("mailto:")){
            MailTo mt = MailTo.parse(url);
            Intent i = new Intent(Intent.ACTION_SEND);
            i.setType("text/plain");
            i.putExtra(Intent.EXTRA_EMAIL, new String[]{mt.getTo()});
            i.putExtra(Intent.EXTRA_SUBJECT, mt.getSubject());
            i.putExtra(Intent.EXTRA_CC, mt.getCc());
            i.putExtra(Intent.EXTRA_TEXT, mt.getBody());
            mContext.startActivity(i);
            view.reload();
            return true;
        }
        view.loadUrl(url);
        return true;
    }
}

在您的活动中,您保留对MyWebViewClient 的引用并将其分配给您的webviewsetWebViewClient(mWebClient)

【讨论】:

  • 关于此解决方案的一个小警告:该方法始终返回 true,它告诉 WebView “我们的 WebViewClient 实现处理所有事情” - 这可能会为重定向的边缘情况带来问题,例如使用 @987654326 @ 在 JavaScript 中。代替view.loadUrl(url); return true;,您可以键入return false; 来实现相同的效果而不会引入错误。在this answer to another question中查看我的详细解释
【解决方案2】:

更简单的方法是:

if(url.startsWith("mailto:")){
    Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
    view.getContext().startActivity(intent);
}

【讨论】:

  • if (MailTo.isMailTo(url)) { //...
  • 我相信 Intent.parseUri 会抛出一个 URISyntaxException 所以你需要用 try { ... } catch { ... }
猜你喜欢
  • 1970-01-01
  • 2013-02-26
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多