首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android WebView "tel:“链接显示找不到网页

Android WebView "tel:“链接显示找不到网页
EN

Stack Overflow用户
提问于 2010-12-03 02:11:02
回答 9查看 73.6K关注 0票数 69

我正在尝试让我的android webview应用程序打开到手机的tel:链接。每次我打开一个电话连接,它都工作得很好,并且打开了电话。然而,一旦我完成我的呼叫并返回到应用程序,它是在一个页面上说“网页找不到电话:0000000000”。然后,我必须再次点击后退按钮,才能转到我点击电话号码的页面。

有没有办法让它打开电话链接,而不是试图在webview中找到页面,也不需要在手机上打开它?

这是我在WebView中使用的代码,用来覆盖它对电话和邮件链接的处理:

代码语言:javascript
复制
        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;
        }

任何帮助都将不胜感激。我已经花了2个小时搜索商品,但没有得到任何答案。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-12-03 03:51:34

好了,我想我解决了这个问题。我只需要按如下方式分隔URL覆盖:

代码语言:javascript
复制
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;
}

现在,我的常规链接和电话链接一样有效。如果我需要,我也可以添加geo: link,它不会给我带来之前在手机上打开地图的问题。

票数 117
EN

Stack Overflow用户

发布于 2011-04-05 07:24:07

对于不应该被覆盖的URL,只需返回false,而不调用loadUrl(url)

代码语言:javascript
复制
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;
}

我发现VIEWing tel:在我们尝试过的所有手机上都能正常工作。不需要特殊情况,因为它的拨号动作。

我注意到WebViews中不支持YouTube视频之类的东西,所以你可能也想检测一下。

整个过程可能被querying the PackageManager for Activities that handle your URI概括为所有类型的URI,这些URI也不是嵌入式浏览器。这可能会被其他已安装的浏览器搞糊涂。

票数 57
EN

Stack Overflow用户

发布于 2018-02-01 12:59:06

代码语言:javascript
复制
public class MainActivity extends Activity {

private static final String HTML ="<!DOCTYPE html><html><body><a 
href='tel:867-5309'>Click here to call!</a></body></html>";
private static final String TEL_PREFIX = "tel:";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WebView wv = (WebView) findViewById(R.id.webview);
    wv.setWebViewClient(new CustomWebViewClient());
    wv.loadData(HTML, "text/html", "utf-8");
}

private class CustomWebViewClient extends WebViewClient {

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

}

这就是我找到的修复方法。您必须使用此方法。

代码语言:javascript
复制
wv.setWebViewClient(new CustomWebViewClient());
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4338305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档