Jef*_*mas 62 android android-webview
我想让我的android webview应用程序打开tel:电话链接.每次打开电话链接时,它都能很好地打开电话.然而,一旦我完成了我的通话并返回应用程序,它就会出现在"未找到网页电话:0000000000"的页面上.然后我必须再次点击后退按钮才能进入我点击电话号码的页面.
有没有办法让它打开TEL链接而不试图在webview中找到页面以及在手机上打开它?
这是我在WebView中使用的代码,用于覆盖其对TEL和Mailto链接的处理:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("mailto:") || url.startsWith("tel:")) {
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(url));
startActivity(intent);
}
view.loadUrl(url);
return true;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.我花了最后2个小时来搜索goodle并且未能提出任何答案.
Jef*_*mas 105
好的,所以我解决了我认为的问题.我只需要按如下方式分隔URL覆盖:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("tel:")) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
startActivity(intent);
view.reload();
return true;
}
view.loadUrl(url);
return true;
}
Run Code Online (Sandbox Code Playgroud)
现在我的常规链接和tel链接一样.我还可以添加geo:链接,如果我需要,它不会给我我之前在手机上打开地图的问题.
Anm*_*Anm 52
而不是调用loadUrl(url),只为不应被覆盖的URL返回false:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if( URLUtil.isNetworkUrl(url) ) {
return false;
}
// Otherwise allow the OS to handle it
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity( intent );
return true;
}
Run Code Online (Sandbox Code Playgroud)
我发现VIEWing tel:在我们尝试过的所有手机上按预期工作.由于DIAL行动,无需特殊情况.
我注意到YouTube视频等在WebView中不起作用,因此您可能也想要检测它们.
通过查询处理URI的活动的PackageManager(也不是嵌入式浏览器),整个过程可能会针对所有类型的URI进行推广.这可能是过度的,并被其他已安装的浏览器搞糊涂了.
Ped*_*ito 17
根据该文件,并根据我的经验,Intent.ACTION_VIEW是完全正常解析tel:,sms:,smsto:,mms:和mmsto:链接.
这是一个5合1:
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url)
{
if (url.startsWith("tel:") || url.startsWith("sms:") || url.startsWith("smsto:") || url.startsWith("mms:") || url.startsWith("mmsto:"))
{
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
startActivity(intent);
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
注意: - Android Nouget shouldOverrideUrlLoading已弃用
您需要使用shouldOverrideUrlLoading以shouldOverrideUrlLoading获得更好的支持.此外,您可能想要检查URL是否具有mailto:或tel:,HTML5中使用它们分别触发邮件客户端和电话拨号.
完整的解决方案现在看起来像这样
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("mailto:")) {
//Handle mail Urls
startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse(url)));
} else if (url.startsWith("tel:")) {
//Handle telephony Urls
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
} else {
view.loadUrl(url);
}
return true;
}
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
final Uri uri = request.getUrl();
if (uri.toString().startsWith("mailto:")) {
//Handle mail Urls
startActivity(new Intent(Intent.ACTION_SENDTO, uri));
} else if (uri.toString().startsWith("tel:")) {
//Handle telephony Urls
startActivity(new Intent(Intent.ACTION_DIAL, uri));
} else {
//Handle Web Urls
view.loadUrl(uri.toString());
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61829 次 |
| 最近记录: |