标签:
先上一个工具类的代码:
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是否为空做了测试
移动数据效果是一样的,有兴趣可以查源码。
标签:
原文地址:http://www.cnblogs.com/liuzhongqi/p/5432550.html