標籤:
先上一個工具類的代碼:
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是否為空白做了測試
移動資料效果是一樣的,有興趣可以查源碼。
Android筆記之網路狀態