如何在android的webview中设置锚定标记mailto:属性

如何在android的webview中设置锚定标记mailto:属性,android,android-emulator,android-widget,Android,Android Emulator,Android Widget,我试着将锚点标记mailto属性设置为 <a href='mailto:info@company.com'>info@company.com</a> 在webview中。当我在模拟器上运行应用程序并单击链接时,它显示“不支持的操作…” 如何在android webview中设置mailto属性 谢谢WebView不支持高级HTML标记。。。您需要做的是: 将webclient设置为webview并覆盖url加载 当您检测到带有mailto的链接时,请尝试发送电子邮件

我试着将锚点标记mailto属性设置为

<a href='mailto:info@company.com'>info@company.com</a>

在webview中。当我在模拟器上运行应用程序并单击链接时,它显示“不支持的操作…”

如何在android webview中设置mailto属性


谢谢

WebView不支持高级HTML标记。。。您需要做的是:

  • 将webclient设置为webview并覆盖url加载
  • 当您检测到带有
    mailto
    的链接时,请尝试发送电子邮件
  • 我会给你一段代码,让你有个想法。请记住,这只是一个基本示例,我现在无法测试它:

    public void onCreate(Bundle icicle) {
        // blablabla
        WebView webview = (WebView) findViewById(R.id.webview); 
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebViewClient( new YourWebClient()); 
        // blablabla
    }
    
    private class YourWebClient extends WebViewClient {     
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.contains("mailto")) {
                // TODO: extract the email... that's your work, LOL
                String email = "";
                sendEmail();
                return super.shouldOverrideUrlLoading(view, url);
            }
            view.loadUrl(url);
            return true;
        }
    }
    
    然后,发送电子邮件:

    public void sendEmail(String email){
        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.setType("plain/text");
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{email});
    
        String mySubject = "this is just if you want";
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, mySubject);
        String myBodyText = "this is just if you want";
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, myBodyText);
        context.startActivity(Intent.createChooser(intent, "Send mail...));
    }
    
    着手

    并加载到您的WebView中

    mWebView.loadDataWithBaseURL(null, myTemplate, "text/html", "utf-8", null);
    

    这是克里斯蒂安回答的另一个选项

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
      if (!(url.startsWith("http") || url.startsWith("#"))) {
        launchIntent(url);
        return true;
      }
      view.loadUrl(url);
      return true;
    }
    
    private void launchIntent(String url){
        final Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
        Uri uri = Uri.parse(url);
        intent.setData(uri);
        context.startActivity(intent);
    }
    
    这将允许像mailto:tel:和google这样的锚定标签


    如果您的html页面有其他您不想启动的锚定,您可能需要调整条件。

    我正在获取此mailto属性在设备上工作。我不知道为什么相同的代码在模拟器上显示错误(正如我上面所说的)。
    mWebView.loadDataWithBaseURL(null, myTemplate, "text/html", "utf-8", null);
    
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
      if (!(url.startsWith("http") || url.startsWith("#"))) {
        launchIntent(url);
        return true;
      }
      view.loadUrl(url);
      return true;
    }
    
    private void launchIntent(String url){
        final Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
        Uri uri = Uri.parse(url);
        intent.setData(uri);
        context.startActivity(intent);
    }