使用Android WebView检测并弹出电子邮件对话框或电话对话框

时间:2010-08-03 21:52:38

标签: android android-webview

在Android上,当内置浏览器遇到电子邮件或电话号码并按下时,会出现一个对话框。

但是,如果我在应用程序的webview中导航到该URL,则不再是这种情况。

我的网页视图是否有与浏览器应用程序相同的属性来检测电子邮件和电话号码,并在按下时弹出相应的默认对话框?

我知道iPhone可以非常轻松地使用Interface Builder中的复选框来完成此操作,我希望Android能够做到这一点。

我已经看过这样的链接:

Is there any way to have WebView auto-link URLs and phone numbers in Android?

并使用中断链接点击的功能,但这对我没有帮助,因为电话号码和电子邮件不一定要链接。

4 个答案:

答案 0 :(得分:3)

我正在寻找你遇到的同样问题。

如果您想要保留网页中包含的网址,但是让电话号码启动拨号程序,并且电子邮件地址启动电子邮件客户端,请尝试此操作。

Android WebView "tel:" links show web page not found

最底层的解决方案对我有用。

答案 1 :(得分:2)

这是手机链接,你可以添加另一个if到邮件链接:)

public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("tel:")) { 
                Intent intent = new Intent(Intent.ACTION_DIAL,
                        Uri.parse(url)); 
                startActivity(intent); 
        }else if(url.startsWith("http:") || url.startsWith("https:")) {
            view.loadUrl(url);
        }
        return true;
    }

答案 2 :(得分:2)

我已将WebView设置为检测手机,电子邮件和地址(在这种情况下会转到Google地图)。这就是我所拥有的:

        URL = "file:///android_asset/dir/people.html";
        webView = (WebView) findViewById(R.id.webViewDir);
        webView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("tel:")) {
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
                startActivity(intent);
                return true;
            } else if (url.startsWith("mailto:")) {
                url = url.substring(7);
                String body = "Body of message.";
                Intent mail = new Intent(Intent.ACTION_SEND);
                mail.setType("application/octet-stream");
                mail.putExtra(Intent.EXTRA_EMAIL, new String[] { url });
                mail.putExtra(Intent.EXTRA_SUBJECT, "Subject");
                mail.putExtra(Intent.EXTRA_TEXT, body);
                startActivity(mail);
                return true;
            } else if (url.startsWith("map:")){
                url = url.substring(4);
                String map = "http://maps.google.com/maps?q=" + url; 
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(map));
                startActivity(intent);
                return true;
            }
            return false;
        }
    });
    webView.loadUrl(URL);

答案 3 :(得分:0)

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("mailto:")) { 
                    try {
                        Intent emailIntent = new Intent(Intent.ACTION_SEND, Uri.parse(url));
                        emailIntent.setType("message/rfc822");
                        String recipient = url.substring( url.indexOf(":")+1 );
                        if (TextUtils.isEmpty(recipient)) recipient = "loco@wareninja.com";
                        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{recipient});
                        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, mContext.getString(R.string.email_subject));
                        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, mContext.getString(R.string.email_message, " "));

                        mContext.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
                    }
                    catch (Exception ex) {}
            }
            return true;
        }