Android 监控网络状态
在Android网络应用程序开发中,经常要判断网络连接是否可用,因此经常有必要监听网络状态的变化。android的网络状态监听可以用BroadcastReceiver来接收网络状态改变的广 播,具体实现如下:
当我们要在程序中监听网络状态时,只要一下几个步骤即可:
1、定义Receiver
定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观
1 connectionReceiver = new BroadcastReceiver() {
2
3 @Override
4 public void onReceive(Context context, Intent intent) {
5 ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
6 NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
7 NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
8
9 if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
10 Log.i(TAG, "unconnect");
11 // unconnect network
12 }else {
13
14 // connect network
15 }
16 }
17 };
2、注册Receiver
在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可:
1 IntentFilter intentFilter = new IntentFilter();
2 intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
3 context.registerReceiver(connectionReceiver, intentFilter);
3、注销Receiver
在适当时注销Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:
1 if (connectionReceiver != null) {
2 unregisterReceiver(connectionReceiver);
3 }
Ps:网上还有很多关于使用TelephonyManager 的方法的,方法如下(但是我试了好几次都有问题,如每次第一次进入一个Activity时会自动收到网络断开的信号,每次网络状态改变时收到多次回调且状态不正确。不知道有什么要注意的地方,求指点!)
1 final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
2
3 mTelephonyMgr.listen(new PhoneStateListener(){
4 @Override
5 public void onDataConnectionStateChanged(int state) {
6 switch(state){
7 case TelephonyManager.DATA_DISCONNECTED://网络断开
8 break;
9 case TelephonyManager.DATA_CONNECTING://网络正在连接
10 break;
11 case TelephonyManager.DATA_CONNECTED://网络连接上
12 break;
13 }
14 }
15 }, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
PS中的方法并没有去尝试过。还是第一种比较好用。如果要程序隐藏在后台的话,建议开个service,将BroadcastReceiver注册在service,但不要忘了取消注册。
在测试中遇到过这样的状况,将一个当前连接wifi的路由设备关闭,但是程序并没有捕捉到unconnect network,可能是因为手机设备立刻连接另一个路由设备了。
因为获取的是服务对象,所以这个网络状态都是时时刷新的,所以我们只需要得到网络状态就可以了!