You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:50:16