BroadReceiver 动态监测网络状态

来源:互联网 发布:梅原大吾背水逆转 知乎 编辑:程序博客网 时间:2024/05/16 01:11

BroadReceiver 动态监测网络状态

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


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

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

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

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

/** * 监听网络状态 *  * @author Keno *  */private class NetRecerve extends BroadcastReceiver {@Overridepublic 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





0 0