【问题标题】:Having Android WebView detect and popup email dialog or phone call dialog让 Android WebView 检测并弹出电子邮件对话框或电话对话框
【发布时间】:2010-08-03 21:52:37
【问题描述】:

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

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

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

我知道 iPhone 可以通过 Interface Builder 中的复选框非常轻松地做到这一点,我希望 android 也能做到这一点。

我查看了以下链接:

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

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

【问题讨论】:

    标签: android android-webview


    【解决方案1】:

    这是电话链接,如果是邮件链接,你可以添加另一个:)

    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】:

      我已将 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】:
            @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;
                }
        

        【讨论】:

          猜你喜欢
          • 2013-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多