Android笔记之网络状态

先上一个工具类的代码:

package com.yonyou.util;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
 * 判断当前网络状态
 * @author xxx
 *
 */
public class NetWorkUtil {
	static NetWorkUtil netWorkUtil;
	private NetWorkUtil(){
		
	}
	public static NetWorkUtil getNetWorkUtil(){
		if(netWorkUtil == null){
			netWorkUtil = new NetWorkUtil();
		}
		return netWorkUtil;
	}
	/**
	 * 判断网络状态是否连接
	 * @param context
	 * @return
	 */
	public boolean isUseble(Context context){
		NetworkInfo info = getNetworkInfo(context);
		if(info != null){
			return info.isAvailable();
		}
		return false;
	}

	/**
	 * 检查是否是wify
	 * @param context
	 * @return
	 */
	public static boolean isWifi(Context context) {
		NetworkInfo info = getNetworkInfo(context);
		if (info != null) {
			if (info.getType() == ConnectivityManager.TYPE_WIFI)
				return true;
		}
		return false;
	}

	/**
	 * 检查是否是移动网络
	 * @param context
	 * @return
	 */
	public static boolean isMobile(Context context) {
		NetworkInfo info = getNetworkInfo(context);
		if (info != null) {
			if (info.getType() == ConnectivityManager.TYPE_MOBILE)
				return true;
		}
		return false;
	}
	/**
	 * 获取网络信息
	 * @param context
	 * @return
	 */
	private static NetworkInfo getNetworkInfo(Context context) {
		ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
		return cm.getActiveNetworkInfo();
	}
}
ConnectivityManager顾名思义,网络管理器,用于管理手机的wify及数据网络,其getActiveNetworkInfo()方法可以获取一个NetWorkInfo对象,此NetWorkInfo对象封装了当前手机的网络信息,包括网络连接状态,网络故障信息等,在使用Http协议发送或请求信息之前当先判断当前网络状态是否可用,也就是此NetWorkInfo对象的isAvailable是否为true,true网络可用,false不可用。但经常忽略一个问题,习惯性地对NetWorkInfo对象进行判空却不清楚什么时候为空。今天做了一个测试(本人比较懒,引用了之前项目的一个界面):
首先修改下工具类的一段代码,
/**
     * 判断网络状态是否连接
     * @param context
     * @return
     */
    public boolean isUseble(Context context){
        NetworkInfo info = getNetworkInfo(context);
        if(info != null){
//            return info.isAvailable();
            return true;
        }
        return false;
    }

然后主页面:

package com.yonyou.activity;


import java.util.HashMap;
import java.util.Map;

import android.annotation.SuppressLint;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.yongyou.wei.R;
import com.yonyou.abstractClass.NetCallBack;
import com.yonyou.constantClass.CIMCUrl;
import com.yonyou.util.NetUtil;
import com.yonyou.util.NetWorkUtil;
/**
 * 
 * @author xxx
 *
 */
public class LoginActivity extends BaseActivity {
    WifiManager mWifiManager;
    EditText et_name;
    EditText et_password;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        init();
    }
    public void init(){
        mWifiManager = (WifiManager) LoginActivity.this.getSystemService(Context.WIFI_SERVICE);
        et_name = (EditText) findViewById(R.id.edt_name);
        et_password = (EditText) findViewById(R.id.edt_password);
    }
    public void login(View view){
        if(mWifiManager.getWifiState() == WifiManager.WIFI_STATE_DISABLED){
            et_name.setText("wify关闭状态");
        }else if(mWifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED){
            et_name.setText("wify打开状态");
        }
        boolean boo = NetWorkUtil.getNetWorkUtil().isUseble(LoginActivity.this);
        if(boo){
            et_password.setText("NetWorkInfo不为null");
        }else{
            et_password.setText("NetWorkInfo为null");
        }
    }
}

效果如下:

这里只将wify对NetWorkInfo是否为空做了测试
移动数据效果是一样的,有兴趣可以查源码。

posted @ 2016-04-25 21:10  祸白  阅读(182)  评论(0编辑  收藏  举报