Android WebView退出拨号器后返回主页而非前页面的问题解决
解决方案:退出拨号器后返回WebView原页面
问题根源
你的代码存在两个关键错误,导致退出拨号器后回到仪表盘页面:
- 错误调用
webview.goBack():处理tel/sms链接时,WebView并未加载该链接,此时调用goBack会让WebView直接退到上一页(仪表盘),从拨号器返回时自然看到的是仪表盘。 - 无效且错误的Intent Flag设置:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)被放在startActivity(intent)之后,完全无法生效;即使生效,该Flag会让拨号器在独立任务栈启动,返回时会回到当前任务栈的根Activity(仪表盘)。
修正后的代码
1. 修复shouldOverrideUrlLoading方法
public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith(TEL_PREFIX) || url.startsWith("sms:")){ Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); startActivity(intent); return true; // 告知WebView已自行处理该链接,无需加载 } else if(url.startsWith("http:") || url.startsWith("https:")) { view.loadUrl(url); return false; } return super.shouldOverrideUrlLoading(view, url); }
2. 保留原有正确逻辑
你的onSaveInstanceState、onRestoreInstanceState和onBackPressed方法逻辑正常,无需修改。
关键说明
- 返回
true:明确告知WebView我们已经处理了tel/sms类型的链接,避免WebView执行默认加载逻辑。 - 移除
webview.goBack():保留WebView当前页面的状态,确保从拨号器返回时,页面停留在点击拨号按钮之前的位置。 - 移除
FLAG_ACTIVITY_NEW_TASK:让拨号器在当前任务栈上下文启动,返回时直接回到当前Activity的WebView页面。
内容的提问来源于stack exchange,提问作者codershhoder
相关产品推荐
相关产品推荐

