android webview 检测联网

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android webview 检测联网相关的知识,希望对你有一定的参考价值。

如何实现webview加裁网页前检测联网状态,联网就加载网页,未联网就转到指定的本地页面,求详细代码,初学,请详细说明,谢谢!

返回false就表示网络不可用,里面做了wifi和2G 3G判断,如果要求在wifi环境下才联网,可以自己改一下,当类型是TYPE_MOBILE时返回false就可以了。

示例用法:
if(!checkNetworkAvailable(MainActivity.this))
// 加载网页


// 以下是检测网络的方法体

public static boolean checkNetworkAvailable(Context context)
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null)
return false;
else
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
NetworkInfo netWorkInfo = info[i];
if (netWorkInfo.getType() == ConnectivityManager.TYPE_WIFI)
return true;
else if (netWorkInfo.getType() == ConnectivityManager.TYPE_MOBILE)
return true;






return false;

参考技术A android的WebView检测加载网页的几种方式及网络异常处理:
1.加载本地assert目录下文件(error.html
webcontent.loadUrl(" file:///android_asset/error.html ");

2.加载网络url(http://www.csdn.com)
webcontent.loadUrl(" http://www.csdn.com ");
3.加载 String 类型html
String

errorHtml = "<html><body><h1>Page not find!</h1></body></html>";
webcontent.loadData(errorHtml,
"text/html", "UTF-8");
4.加载SD卡html:
webcontent.loadUrl(" content://com.android.htmlfileprovider/sdcard/kris.html ");

异常处理:
webcontent.setWebViewClient(new WebViewClient()
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
// TODO Auto-generated method stub
Log.i("webview", "url = "+url);
view.loadUrl(url);
return true;

@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl)
super.onReceivedError(view, errorCode, description, failingUrl);
//这里进行无网络或错误处理,具体可以根据errorCode的值进行判断,做跟详细的处理。
view.loadUrl(file:///android_asset/error.html );

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
Log.i("onPageStarted", url);
super.onPageStarted(view, url, favicon);


@Override
public void onPageFinished(WebView view, String url)
Log.i("onPageFinished", url);
super.onPageFinished(view, url);

);
参考技术B public static boolean isNetworkAvailable(Context ctx)
ConnectivityManager cm = (ConnectivityManager) ctx
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null && info.isConnected());

加载网页前用这个函数判断联网情况追问

加载网页时如何调用这个代码?

追答

复写WebViewClient的shouldOverrideUrlLoading方法 在里面判断

本回答被提问者和网友采纳

Android中WebView和父控件滑动冲突

参考技术A 问题场景 在项目的App中有一个ViewPager,它内部包含了WebView,而内部的webview加载了一个可以左右滑动的网页。当我们在网页滑动的时候,会直接切换到下一个WebView的页面,而不是优先响应WebView的滑动,这样一来WebView和ViewPager的滑动就出现了冲突。

但是产品期望场景是当手指落到WebView的可滑动区域是相应WebView的滑动事件,当滑动到边缘之后再相应ViewPager的滑动事件。

有了以上思路我们就能着手实现了,但是我们怎么能检测到WebView的滑动事件完成了呢?原来WebView的实现者也考虑到了这方面的需求,它暴露了一个方法

官方文档描述如下图:

通过上述方法我能就能监测到WebView滑动到了边界,接下来就是对拦截事件的处理了:

通过上述处理就能完美解决开篇的问题。

以上是关于android webview 检测联网的主要内容,如果未能解决你的问题,请参考以下文章

Android WebView 重定向问题

Android WebView 获取网页的标题

Android WebView开发:WebView性能优化

Android WebView开发:WebView性能优化

Android WebView开发:WebView性能优化

Android WebView开发:WebView性能优化