在安卓应用开发遇到需要打开网页时,需要用到WebView组件,测试时一切正常,而当实际运维过程中,却总有客户打不开,提示“net::ERR_CONNECTION_TIMED_OUT”或者“net::err_connection_reset”等类似的问题,乍一看,net开头应该跟网络有关,然而使用系统自带的浏览器打开该网页却可以正常访问,此时就要查看是不是代码的问题了。
经过一番折腾,发现有时候可能跟原网站的UserAgent有关系,于是在代码里添加了UA设置相关的代码:
setting.setUserAgentString(“User-Agent:Android”);
再给有出现该类问题的客户安装测试,可以正常打开了。
有关安卓UserAgent,可以参考该篇文章:https://www.jianshu.com/p/4f9e2e66ea12
2021-05-09更新:
出现net::err_connection_reset的错误原来跟
shouldOverrideUrlLoading
这个方法的返回值有关系。
官方api文档大致翻译一下:
- 若没有设置 WebViewClient 则由系统(Activity Manager)处理该 url,通常是使用浏览器打开或弹出浏览器选择对话框。
- 若设置 WebViewClient 且该方法返回 true ,则说明由应用的代码处理该 url,WebView 不处理,也就是程序员自己做处理。
- 若设置 WebViewClient 且该方法返回 false,则说明由 WebView 处理该 url,即用 WebView 加载该 url。
public boolean shouldOverrideUrlLoading(WebView view, String url2){ view.loadUrl(url2); return false; } 这里返回false,就能正常打开了!