WebView通过Intent拨打电话报错:net:ERR_UNKNOWN_URL_SCHEME求助
解决WebView中tel链接报错net:ERR_UNKNOWN_URL_SCHEME的问题
嘿,我帮你排查下这个tel链接的问题!你说用了内部类还是没解决,大概率是WebViewClient的重写逻辑没处理到位,或者没覆盖到所有版本的兼容情况。我给你一套靠谱的实现方案,一步步来:
核心问题原因
WebView默认只处理http/https开头的URL,像tel:、mailto:这类自定义URL Scheme,WebView不知道怎么处理,就会抛出net:ERR_UNKNOWN_URL_SCHEME错误。我们需要手动拦截这类链接,交给系统应用去处理。
正确的实现代码
下面是完整的WebActivity代码,用内部类实现WebViewClient,同时兼容Android 7.0以上和以下的版本:
public class WebActivity extends AppCompatActivity { private static final String TEL_PREFIX = "tel:"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); WebView webView = findViewById(R.id.web_view); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); // 如果你的网页需要JS支持,记得打开 // 关键:设置自定义的WebViewClient,拦截URL处理 webView.setWebViewClient(new WebViewClient() { // 处理Android 6.0及以下系统的URL拦截 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return handleCustomUrl(url); } // 处理Android 7.0及以上系统的URL拦截(新的重载方法) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); return handleCustomUrl(url); } // 统一处理自定义Scheme的逻辑 private boolean handleCustomUrl(String url) { // 拦截tel开头的链接 if (url.startsWith(TEL_PREFIX)) { // 调用系统拨号界面(不用申请CALL权限,ACTION_DIAL是安全的) Intent dialIntent = new Intent(Intent.ACTION_DIAL); dialIntent.setData(Uri.parse(url)); startActivity(dialIntent); // 返回true表示我们自己处理了这个链接,WebView无需再加载 return true; } // 其他http/https链接,交给WebView正常加载 return false; } }); // 加载你的目标网页 webView.loadUrl("https://your-target-url.com"); } }
容易踩坑的注意点
- 必须设置自定义WebViewClient:如果你的WebView用了默认的WebViewClient,或者后来被其他代码覆盖了,拦截逻辑就不会生效。
- 覆盖两个重载方法:Android 7.0之后,系统新增了带
WebResourceRequest参数的shouldOverrideUrlLoading方法,只重写旧方法会导致高版本系统不触发拦截。 - 处理URL的异常情况:如果网页里的tel链接有空格或非法字符,可以在
handleCustomUrl里先做下清理,比如url = url.trim();。 - 权限问题:用
ACTION_DIAL不需要申请CALL_PHONE权限,系统会打开拨号界面让用户手动发起呼叫;如果用ACTION_CALL才需要权限,但不推荐直接调用,因为会跳过用户确认。
内容的提问来源于stack exchange,提问作者Manu Bhogal
相关产品推荐
相关产品推荐

