Как я уже сказал в своем комментарии, использование WebViewClient
- это именно то, как вы бы это исправили, если я правильно понимаю.
Ваша проблема:
Проблемав том, что когда вы нажимаете эту ссылку mailto:
, WebView пытается открыть почтовый клиент по умолчанию, но HTML не отправляет Intent, и решение заключается в том, что вам нужно создать это Intent.
Решение:
// add a WebViewClient to handle url requests
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
//You can also use 'url.startsWith()'
if (url.contains("mailto:")){
MailTo mailTo = MailTo.parse(url);
// make sure you have a context set somewhere in your activity, other wise use YOUR_ACTIVITY_NAME.this.
// For this example I am using mContext because that is my context variable
Intent mailIntent = sendEmail(mContext, mailTo.getTo(), mailTo.getSubject(), mailTo.getBody()); // I added these extra parameters just incase you need to send those
mContext.startActivity(mailIntent);
view.reload(); // reload your webview using view.reload()
return true;
}else{
// Handle what t do if the link doesn't contain or start with mailto:
view.loadURL(url); // you want to use this otherwise the links in the webview won't work
}
return true;
}
});
Затем метод sendEmail()
:
// Now you need the sendEmail method to open the devices mail client and set the relevant fields
private Intent sendEmail(Context context, String email, String subject, String body){
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.putExtra(Intent.EXTRA_EMAIL, email); // if you wanted to send multiple emails then you would use intent.putExtra(Intent.EXTRA_EMAIL, new String[] { email })
intent.putExtra(Intent.EXTRA_TEXT, body); // optional if you have the body in your mailto: link
intent.putExtra(Intent.EXTRA_SUBJECT, subject); // optional if you have the subject in your mailto: link
intent.setType("text/plain");
return intent;
}
Конечные точки:
Я просто хочу сказать, что если вы используете WebView, вы должны присоединить WebViewClient, чтобы использовать передовой опыт.Это позволяет вам обрабатывать все, что касается веб-просмотра, а не просто быть статическим элементом.Метод shouldOverrideUrlLoading()
и onErrorReceived()
- это минимум, который вам следует использовать при использовании веб-просмотра в вашем приложении.