问一个关于WebView的问题

qq_40252810 2019-04-19 06:50:14
我按照第一行代码基于WebView控件实现了一个可以上网百度的例程,
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String
url) {
view.loadUrl(url); // 根据传入的参数再去加载新的网页
return true; // 表示当前WebView可以处理打开新网页的请求,不用借助
系统浏览器
}
});
webView.loadUrl("http://www.baidu.com");
核心代码是这样的,我确实运行成功了,也可以打开百度的首页,我下载安装到自己真机里面,也可以打开百度,但是点击百度推荐的链接时却显示“找不到网页”,错误提示为net::ERR_UNKNOWN_URL_SCHEME,可是我看书中说可以点击百度的其他链接啊,不懂
...全文
527 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_40252810 2019-04-20
  • 打赏
  • 举报
回复
看这段代码,意思是不是我获取了网址然后通过webview再发出去,通过webview发送数据,获取后再解析是可以的,但是打开百度后,如果直接点击链接的话,不知道这中间的流程是啥
szuzsq 2019-04-20
  • 打赏
  • 举报
回复
估计这个SCHEME,不是http 如 baidu://xxxxxxx weixin://xxxxxx 其实是打开相应的app,再做某些操作,例如微信授权登录。
王能 2019-04-19
  • 打赏
  • 举报
回复
你需要setWebViewClient

    /**
     * 增加任意线程访问的{@link #mNowUrl}
     * 增加scheme拦截
     */
    public static class MyWebViewClient extends WebViewClient {

        public String mNowUrl;//当前正在访问的url,js回调用到

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            if (Build.VERSION.SDK_INT > 20) {
                String url = request.getUrl().toString();
                if (!url.startsWith("http") && url.contains(":")) {//不是http开头的scheme就隐式跳转
                    try {
                        view.getContext().startActivity(new Intent().setAction(Intent.ACTION_VIEW).setData(Uri.parse(url)));
                        return true;
                    } catch (Exception ignored) {
                    }
                } else {
                    mNowUrl = url;
                }
            }
            return super.shouldOverrideUrlLoading(view, request);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Build.VERSION.SDK_INT < 21) {
                if (!url.startsWith("http") && url.contains(":")) {//不是http开头的scheme就隐式跳转
                    try {
                        view.getContext().startActivity(new Intent().setAction(Intent.ACTION_VIEW).setData(Uri.parse(url)));
                        return true;
                    } catch (Exception ignored) {
                    }
                } else {
                    mNowUrl = url;
                }
            }
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
王能 2019-04-19
  • 打赏
  • 举报
回复
那个推荐链接应该是下载内容或者说跳转app的操作
哈哈的bug 2019-04-19
  • 打赏
  • 举报
回复
你的版本可能是9.0的,9.0不支持http请求

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧