BroadReceiver 动态监测网络状态

BroadReceiver 动态监测网络状态

如下图,单检测到网络状态断开或无连接时,显示警告布局

BroadReceiver 动态监测网络状态_第1张图片

这是开发中非常常见的一个问题,监听网络状态有不同方法:

1.轮询 就是每隔一段时间,获取一次网络状态,达到监听网络状态的目的,缺点:效率较低

扩展:轮询法的概念是,由CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始。轮询法实作容易,但效率偏低。

2.使用广播接收器动态监听网络状态,广播接收器与轮询相比,可以理解为轮训是主动访问,广播则是一种被动的获得改变。下面代码主要说说广播BroadReceiver 动态监测网络状态 

/**
	 * 监听网络状态
	 * 
	 * @author Keno
	 * 
	 */
	private class NetRecerve extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			if (intent.getAction().equals(
					ConnectivityManager.CONNECTIVITY_ACTION)) {
				// 获得系统网络连接管理服务
				ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
				// 获得网络连接信息
				NetworkInfo networkInfo = cm.getActiveNetworkInfo();
				if (networkInfo != null && networkInfo.isAvailable()
						&& networkInfo.isConnected()) {
					MyLog.i(TAG, "网络连接正常");
					warning_layout.setVisibility(View.GONE);
				} else {
					MyLog.i(TAG, "无连接");
					warning_layout.setVisibility(View.VISIBLE);
				}
			}
		}
	}


在oncreate中注册广播接收器

IntentFilter intentFilterNet = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
intentFilterNet.addCategory(Intent.CATEGORY_DEFAULT);
netReceive = new NetRecerve();
registerReceiver(netReceive, intentFilterNet);


为无网络提示布局绑定监听事件,当网络状态为无连接时,点击该布局进入系统网络设置界面

/**
	 * 打开系统网络设置
	 * 
	 * @param context
	 */
	public static void openSettingNet(Context context) {
		Intent intent = null;
		// 判断手机系统的版本 即API大于10 就是3.0或以上版
		if (android.os.Build.VERSION.SDK_INT > 10) {
			intent = new Intent(
					android.provider.Settings.ACTION_WIRELESS_SETTINGS);
			MyLog.d(TAG, "api level 10");
		} else {
			intent = new Intent();
			ComponentName component = new ComponentName("com.android.settings",
					"com.android.settings.WirelessSettings");
			intent.setComponent(component);
			intent.setAction("android.intent.action.VIEW");
			MyLog.d(TAG, "api level less 10");
		}
		context.startActivity(intent);
	}

最后这段打开系统应用的代码,应该要注意不同API版本的区别

调用各种系统应用的说明 http://blog.csdn.net/lang791534167/article/details/24767437





你可能感兴趣的:(网络状态,动态监听)