WebView js判断是否联网后页面自动跳转
2013-12-01 22:13
651 查看
需求:
webview和js的交互,在离线进入app时,打开显示的页面是A页面,如果这时变成在线了,那么应该自动跳转到B页面;如果本来就是在在线时打开的app,那么久会直接进入B页面,就算此时变成离线,也不会变到A页面。(假如:WebView myWebView,A页面url为AURL,B页面url为BURL)
问题:
js端已写有网络判断,在ios使用时是直接监听就可以,但是android端js写的判断无效,这个问题我也不明白是为什么,所以判断网络这个就落到了android手上。
分析:
网络判断这块内容网上有很多,也就那么几句话而已,但是怎么才能实现自动跳转呢?两个实现方式: 一、用定时器;二、用广播
判断是否联网:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class ConnectNet { public static boolean isNetworkConnected(Context context) { // 判断是否联网 ConnectivityManager cwjManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = cwjManager.getActiveNetworkInfo(); if (info != null && info.isAvailable()) { // 如果联网,返回true return true; } else { // 不联网,返回false return false; } } } |
方案一:定时器
handle和Runnable的运用,就可以进行更新页面1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Handler handler = new Handler(); // 构建Runnable对象,在runnable中更新页面 Runnable runnable = new Runnable() { @Override public void run() { // 更新页面 // 如果联网 if (ConnectNet.isNetworkConnected(context)) { myWebView.loadUrl(AURL); handler.removeCallbacks(this); } else { myWebView.loadUrl(BURL); handler.postDelayed(this, 2000); // 每两秒执行一次runnable } } }; handler.post(runnable); |
用定时器这么更新,会有一个很大的问题,就是因为是每两秒就执行一次,所以会每两秒就刷新一次页面,也就会一直在刷新,因为是loadUrl,所以屏幕就会一直闪,一直再跳动,这个问题没法解决,所以我还是选择用了广播,也是很简单的一种方法,最早朋友提示我也是用这个就好,只是自己太烂了,知道广播怎么写,却不知道怎么把该写的内容加入进去,也是突然之间想到的:
方案二:广播
将主程序中的myWebView设为public static,以便后面之间调用,应该有其他更好的方法的,我就不去写了然后主程序就只需判断首次登录时的是否联网,进入哪个页面就好:
1 2 3 4 5 6 | if (ConnectNet.isNetworkConnected(context)) { myWebView.loadUrl(BURL); } else { myWebView.loadUrl(AURL); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class NetCheckReceiver extends BroadcastReceiver { private static final String TAG = "NetCheckReceiver"; // android 中网络变化时所发的Intent的名字 public static final String netACTION = "android.net.conn.CONNECTIVITY_CHANGE"; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if (intent.getAction().equals(netACTION)) { Log.e(TAG, "ACTION:" + intent.getAction()); // Intent中ConnectivityManager.EXTRA_NO_CONNECTIVITY这个关键字表示着当前是否连接上了网络 // true 代表网络断开 false 代表网络没有断开 boolean isBreak = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); Log.e(TAG, "is break:" + isBreak); if (isBreak) { Log.d(TAG, "onTeceive:NOT connected, stopping Updaterservice"); } else { Log.d(TAG, "onReceive: connected, starting UpdaaterService"); context.myWebView.loadUrl(BURL); } } } } |
1 2 3 4 5 | <receiver android:name=".NetCheckReceiver" android:enabled="true"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver> |
1 | <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> |
相关文章推荐
- JS判断设备是否是移动端自动跳转到对应页面的简单代码
- 百度高度js 检测web页面是否正在操作,如超过规定时间内未操作将自动跳转至指定页面。
- js判断是否是移动端自动跳转到wap页面代码
- js判断是否是移动端自动跳转到wap页面代码
- 实现session超时后自动跳转到登陆页面(前台JS,JAVA,判断是否Ajax请求)
- js 检测web页面是否正在操作,如超过规定时间内未操作将自动跳转至指定页面。
- js判断是否是微信内置浏览器以及自动关闭页面回到会话窗口
- js官网判断是否手机跳转到手机页面
- JS判断是否是微信页面,判断手机操作系统(ios或android)并跳转到不同下载页面
- JS判断是否是微信页面,判断手机操作系统(ios或android)并跳转到不同下载页面
- JS判断客户端语言 自动跳转多语言页面
- js判断来路是否是百度等搜索索引进行弹窗或自动跳转
- JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
- a标签根据js返回值判断页面是否跳转
- android webview goback 跳过页面302自动跳转方法
- google tv上webview页面js实现焦点跳转
- 判断用户是否登录,用户在没有登录访问页面时,自动跳转到登录页面(二)
- JS判断客户端是否是iOS或者Android,js判断是不是qq,js判断是否是移动端,跳转到相应的页面
- JS 判断浏览器语言设置,自动跳转到相应页面
- Android--判断WebView是否已经滚动到页面底端