Android原生应用method does not override错误及whatsapp://协议处理求助
错误原因
该编译报错的核心是你重写的方法和父类WebViewClient的方法签名不匹配,@Override注解检测到父类不存在你当前编写的方法,因此抛出错误。
修复方案
1. 替换正确的重写方法
根据你需要兼容的Android版本,使用对应正确签名的shouldOverrideUrlLoading方法,以下是兼容所有Android版本的完整写法:
// 适配API 24及以上版本 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); if (url.startsWith("whatsapp://")) { try { Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); return true; } Toast.makeText(view.getContext(), "请先安装WhatsApp", Toast.LENGTH_SHORT).show(); return true; } catch (URISyntaxException e) { e.printStackTrace(); } } // 普通网页链接继续在WebView内加载 view.loadUrl(url); return true; } // 适配API 24以下版本,已标记废弃不影响正常运行 @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("whatsapp://")) { try { Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); return true; } Toast.makeText(view.getContext(), "请先安装WhatsApp", Toast.LENGTH_SHORT).show(); return true; } catch (URISyntaxException e) { e.printStackTrace(); } } view.loadUrl(url); return true; }
2. 补充必要配置
在AndroidManifest.xml中添加对应权限,避免Android 11及以上版本无法检测到已安装的WhatsApp:
<!-- 基础网络权限,WebView运行必需 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- Android 11+ 应用可见性配置,用于检测WhatsApp是否安装 --> <queries> <package android:name="com.whatsapp" /> </queries>
3. 验证配置生效
确保你已经给WebView设置了自定义的WebViewClient:
webView.setWebViewClient(new 你的自定义WebViewClient类名());
修改完成后执行菜单栏的Build -> Clean Project再Build -> Rebuild Project,编译错误会自动消失,WhatsApp链接唤起功能也可以正常运行。
内容的提问来源于stack exchange,提问作者Istiack Mohammad
相关产品推荐
相关产品推荐

