【问题标题】:Webview "mailto:" link & "tel:" link work using Intent.ACTION_VIEW, but how do I add unique Subject ie for "mailto:" linkWebview“mailto:”链接和“tel:”链接使用Intent.ACTION_VIEW工作,但如何添加唯一主题,即“mailto:”链接
【发布时间】:2013-12-14 01:35:36
【问题描述】:

我已经使用以下代码完成了这项工作。所有的 http url 在 web 视图中打开,“tel:”链接在拨号程序中打开,“mailto:”链接在电子邮件客户端中打开。

但我的问题是如何将“mailto:”链接的主题更改为不同的主题,而不是其预定义的主题。我猜应该有2个单独的意图,1个用于“tel:”链接,1个用于“mailto:”链接。我根本不知道如何将代码放入下面的 shouldOverrideUrlLoading 方法中。或者,也许我使用了错误的方法来满足我的要求。

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if( url.startsWith("http:") || url.startsWith("https:") ) {
                return false;
            }

            // Otherwise allow the OS to handle it
            Intent intent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse(url));
            startActivity(intent);
            return true;
        }

我设法让我自己的主题“mailto:”与 Intent 一起使用,但代码中没有包含“tel:”链接。那么我怎样才能同时在“mailto:”链接中使用我自己的主题呢?

任何想法或建议将不胜感激!

【问题讨论】:

    标签: android android-intent webview hyperlink


    【解决方案1】:

    这是我的解决方案,它适用于我。我希望它可以帮助其他有同样问题的人。

    @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if( url.startsWith("http:") || url.startsWith("https:") ) {
                    return false;
                }
    
                // Otherwise allow the OS to handle it
                else if (url.startsWith("tel:")) { 
                    Intent tel = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
                    startActivity(tel);
                    return true;
                }
                else if (url.startsWith("mailto:")) {
                    String body = "Enter your Question, Enquiry or Feedback below:\n\n";
                    Intent mail = new Intent(Intent.ACTION_SEND);
                    mail.setType("application/octet-stream");
                    mail.putExtra(Intent.EXTRA_EMAIL, new String[]{"email address"});
                    mail.putExtra(Intent.EXTRA_SUBJECT, "Subject");
                    mail.putExtra(Intent.EXTRA_TEXT, body);
                    startActivity(mail);
                    return true;
                    }
                return true;
            }
    

    【讨论】:

      【解决方案2】:
      @Override
              public boolean shouldOverrideUrlLoading(WebView wv, String url) {
      
      
                  if(url.startsWith(TEL_PREFIX)) {
                      Intent intent = new Intent(Intent.ACTION_DIAL);
                      intent.setData(Uri.parse(url));
                      startActivity(intent);
                      return true;
                  }
                  if (url.startsWith("mailto:")) {
      
      
                      String body = "Enter your Question, Enquiry or Feedback below:\n\n";
      
      
                      Intent email = new Intent(Intent.ACTION_SEND);
                      email.putExtra(Intent.EXTRA_EMAIL, new String[]{"a.ee.ee@rt.com"});
                      email.putExtra(Intent.EXTRA_SUBJECT, "Subject");
                      email.putExtra(Intent.EXTRA_TEXT, body);
                      //need this to prompts email client only
                      email.setType("message/rfc822");
                      startActivity(Intent.createChooser(email, "Choose an Email client :"));
      
      
                      return true;
                      }
                  return false;
              }
          });
      

      【讨论】:

      • 它为我工作。上面的答案是 mail.setType("application/octet-stream");我已经更正了。谢谢
      【解决方案3】:

      当您检测到 mailto 时:尝试将“?subject=custom”附加到它。我猜是这样的:

      if (url.startsWith("mailto:")) {
          Uri mailWithSubject = Uri.parse(url).
                  buildUpon().appendQueryParameter("subject", "Hello World!").build();
          Intent intent = new Intent(Intent.ACTION_VIEW, mailWithSubject);
          ...
      }
      

      【讨论】:

      • 好的,我有点遵循你的逻辑,但我如何为“tel:”链接添加代码。就像我说的,我可以根据需要解析“mailto:”链接,但代码中没有“tel:”链接。更重要的是,如何在代码中使用两个链接,只在“mailto:”链接中进行轻微编辑以更改主题?
      • 你想用 tel: 链接做什么?
      • tel:启动拨号程序的链接。我可以同时做 mailto: & tel: 链接,但不能一起做。那么如何编辑 mailto: 链接以添加我自己的主题并让 tel: 链接以相同的方法启动拨号器?
      【解决方案4】:

      为所有 mailto 链接收件人填写 MainActivity

      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
          if( url.startsWith("http:") || url.startsWith("https:") ) {
              return false;
          }
          // Otherwise allow the OS to handle it
          else if (url.startsWith("tel:")) {
              Intent tel = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
              startActivity(tel);
              return true;
          }
          else if (url.startsWith("mailto:")) {
              String body = "Enter your Question, Enquiry or Feedback below:\n\n";
              Intent mail = new Intent(Intent.ACTION_SEND);
      
              Intent intent = mail.setType("application/octet-stream");
      
              // use for any mailto link for the recipient
              MailTo recipient = MailTo.parse(url);
              mail.putExtra(Intent.EXTRA_EMAIL, new String[]{recipient.getTo()});
      
              mail.putExtra(Intent.EXTRA_SUBJECT, "Subject");
              mail.putExtra(Intent.EXTRA_TEXT, body);
              startActivity(mail);
              return true;
          }
          return true;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-26
        • 2020-02-04
        • 2012-06-18
        • 2021-04-08
        • 2015-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多