Webview “mailto:” link & “tel:” link work using In

2019-06-22 08:33发布

I've got this working as it should using the following code. All http urls open as they should within the webview, "tel:" link opens as it should in dialler, and "mailto:" link opens as it should in email client.

But my problem is how do I change the subject of the "mailto:" link to something different instead of its pre-defined subject. I'm guessing there should be 2 seperate intents, 1 for "tel:" link & 1 for "mailto:" link. I simply don't know how to put the code into the shouldOverrideUrlLoading method below. Or maybe I'm using the wrong method for what I require.

        @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;
        }

I managed to get my own subject "mailto:" working with Intent, but without the "tel:" link included in code. So how can I do both plus use my own subject in "mailto:" link?

Any ideas or suggestions will be much appreciated!

4条回答
做自己的国王
2楼-- · 2019-06-22 08:39

When you detect mailto: try appending "?subject=custom" to it. Something like this I guess:

if (url.startsWith("mailto:")) {
    Uri mailWithSubject = Uri.parse(url).
            buildUpon().appendQueryParameter("subject", "Hello World!").build();
    Intent intent = new Intent(Intent.ACTION_VIEW, mailWithSubject);
    ...
}
查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-06-22 08:40
@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;
        }
    });
查看更多
小情绪 Triste *
4楼-- · 2019-06-22 08:42

This is my solution & it works for me. I hope it helps anyone else with the same issue I had.

@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;
        }
查看更多
相关推荐>>
5楼-- · 2019-06-22 08:58

Complete MainActivity for all mailto link recipient.

@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;
}
查看更多
登录 后发表回答