让Android WebView检测并弹出电子邮件对话框或电话对话
在android上,当内置浏览器遇到一封电子邮件或一个电话号码并按下时,就会出现一个对话框 但是,如果我在应用程序的webview中导航到该url,情况就不再是这样了 我的webview在检测电子邮件和电话号码以及按下时弹出相应的默认对话框方面是否具有与浏览器应用程序相同的属性 我知道iPhone可以很容易地通过界面生成器中的复选框来实现这一点,我希望android也能做到这一点 我研究了以下链接:让Android WebView检测并弹出电子邮件对话框或电话对话,android,android-webview,Android,Android Webview,在android上,当内置浏览器遇到一封电子邮件或一个电话号码并按下时,就会出现一个对话框 但是,如果我在应用程序的webview中导航到该url,情况就不再是这样了 我的webview在检测电子邮件和电话号码以及按下时弹出相应的默认对话框方面是否具有与浏览器应用程序相同的属性 我知道iPhone可以很容易地通过界面生成器中的复选框来实现这一点,我希望android也能做到这一点 我研究了以下链接: 使用中断链接点击的功能,但这对我没有帮助,因为电话号码和电子邮件不一定要链接。这是电话链接,您
使用中断链接点击的功能,但这对我没有帮助,因为电话号码和电子邮件不一定要链接。这是电话链接,您可以添加另一个if-to-mail链接:)
我已将WebView设置为检测电话、电子邮件和地址(在这种情况下,将转到谷歌地图)。这就是我所拥有的:
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);
@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;
}
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);