在android开发中,时常要对网络连接状态变化的事件作出适当的处理。处理方式可通过监听android.net.conn.CONNECTIVITY_CHANGE广播实现。
记录处理代码如下:
第一步,实现广播处理逻辑:
private BroadcastReceiver mConnectReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//Toast.makeText(context, intent.getAction(), 1).show();
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobileInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo activeInfo = manager.getActiveNetworkInfo();
if(wifiInfo.isConnected()){
handler2.sendEmptyMessage(MSG_TYPE_WIFI_CONNECTED);
}
else{
handler2.sendEmptyMessage(MSG_TYPE_WIFI_DISCONNECTED);
}
String active;
if(activeInfo != null)//如果无网络连接activeInfo为null
active = activeInfo.getTypeName();
else
active ="null";
Toast.makeText(context, "mobile:"+mobileInfo.isConnected()+"\n"+"wifi:"+wifiInfo.isConnected()
+"\n"+"active:"+active, 1).show();
}
};
第二步,注册广播(这里采取动态注册)
private void registerConnect() {
IntentFilter mWifiFilter = new IntentFilter();
mWifiFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
mActivity.registerReceiver(mConnectReceiver, mWifiFilter);
}
private void unRegisterConnect() {
mActivity.unregisterReceiver(mConnectReceiver);
}
第三步,添加消息处理逻辑:
public Handler handler2 = new Handler(){
@Override
public void handleMessage(Message msg){
Log.i("TEST", "WramFragment::handleMessage:"+msg.toString());
super.handleMessage(msg);
//只要执行到这里就关闭对话框
switch(msg.what){
case MSG_TYPE_WIFI_CONNECTED:
WifiInfo info= mWifiAdmin.getConnectionInfo();
String ssid = (info==null)?"null":info.getSSID();
//todo
break;
case MSG_TYPE_WIFI_DISCONNECTED:
//todo
break;
default:
break;
}
}
};