Android网络状态监控
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,可能是因为手机设备立刻连接另一个路由设备了。
因为获取的是服务对象,所以这个网络状态都是时时刷新的,所以我们只需要得到网络状态就可以了!