1. 程式人生 > >Android工具類整合

Android工具類整合

Android-JSONUtil工具類
常用的Json工具類,包含Json轉換成實體、實體轉json字串、list集合轉換成json、陣列轉換成json

public class JSONUtil {

    private static final String TAG = JSONUtil.class.getSimpleName();

    private JSONUtil(){}

    private static Gson gson = new Gson();

    /**
     * 傳入一個頭部,獲取頭部管控中的所有String資訊
     * @return
*/
public static String getHeadContext(String jsonData, String head) { String jsonObjectString = null; try { JSONObject jsonObject = new JSONObject(jsonData); jsonObjectString = jsonObject.get(head).toString(); // LogUtil.d(TAG, "getHeadContext 只去頭部header的資料資訊:" + jsonObjectString);
} catch (Exception e) { e.printStackTrace(); } return jsonObjectString; } /** * 將一個物件轉換成一個Json字串 * @param t * @return */ public static <T> String objectToJson(T t){ if (t instanceof String) { return t.toString(); } else
{ return gson.toJson(t); } } /** * 將Json字串轉換成對應物件 * @param jsonString Json字串 * @param clazz 對應位元組碼檔案.class * @return */ @SuppressWarnings("unchecked") public static<T> T jsonToObject(String jsonString, Class<T> clazz){ if (clazz == String.class) { return (T) jsonString; } else { return (T)gson.fromJson(jsonString, clazz); } } /** * 將List集合轉換為json字串 * @param list List集合 * @return */ public static<T> String listToJson(List<T> list){ JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = null; try { for (int i = 0; i < list.size(); i++) { jsonObject = new JSONObject(objectToJson(list.get(i))); jsonArray.put(jsonObject); } } catch (JSONException e) { e.printStackTrace(); } finally { if (jsonObject != null) { jsonObject = null; } } return jsonArray.toString(); } /** * 將陣列轉換成json字串 * @param array 陣列 * @return */ public static<T> String arrayToJson(T[] array){ JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = null; try { for (int i = 0; i < array.length; i++) { jsonObject = new JSONObject(objectToJson(array[i])); jsonArray.put(jsonObject); } } catch (JSONException e) { e.printStackTrace(); } finally { if (jsonObject != null) { jsonObject = null; } } return jsonArray.toString(); } /** * 獲取json字串中的值 * @param json json字串 * @param key 鍵值 * @param clazz 所取資料型別,例如:Integer.class,String.class,Double.class,JSONObject.class * @return 存在則返回正確值,不存在返回null */ public static<T> T getJsonObjectValue(String json, String key, Class<T> clazz){ try { return getJsonObjectValue(new JSONObject(json), key, clazz); } catch (JSONException e) { e.printStackTrace(); } return null; } /** * 獲取jsonObject物件中的值 * @param jsonObject jsonObject物件 * @param key 鍵值 * @param clazz 所取資料型別,例如:Integer.class,String.class,Double.class,JSONObject.class * @return 存在則返回正確值,不存在返回null */ @SuppressWarnings("unchecked") public static<T> T getJsonObjectValue(JSONObject jsonObject, String key, Class<T> clazz){ T t = null; try { if (clazz == Integer.class) { t = (T) Integer.valueOf(jsonObject.getInt(key)); }else if(clazz == Boolean.class){ t = (T) Boolean.valueOf(jsonObject.getBoolean(key)); }else if(clazz == String.class){ t = (T) String.valueOf(jsonObject.getString(key)); }else if(clazz == Double.class){ t = (T) Double.valueOf(jsonObject.getDouble(key)); }else if(clazz == JSONObject.class){ t = (T) jsonObject.getJSONObject(key); }else if(clazz == JSONArray.class){ t = (T) jsonObject.getJSONArray(key); }else if(clazz == Long.class){ t = (T) Long.valueOf(jsonObject.getLong(key)); } } catch (JSONException e) { e.printStackTrace(); } return t; } /** * json字串轉換為ContentValues * @param json json字串 * @return */ @SuppressWarnings("rawtypes") public static ContentValues jsonToContentValues(String json){ ContentValues contentValues = new ContentValues(); try { JSONObject jsonObject = new JSONObject(json); Iterator iterator = jsonObject.keys(); String key; Object value; while (iterator.hasNext()) { key = iterator.next().toString(); value = jsonObject.get(key); String valueString = value.toString(); if (value instanceof String) { contentValues.put(key, valueString); }else if(value instanceof Integer){ contentValues.put(key, Integer.valueOf(valueString)); }else if(value instanceof Long){ contentValues.put(key, Long.valueOf(valueString)); }else if(value instanceof Double){ contentValues.put(key, Double.valueOf(valueString)); }else if(value instanceof Float){ contentValues.put(key, Float.valueOf(valueString)); }else if(value instanceof Boolean){ contentValues.put(key, Boolean.valueOf(valueString)); } } } catch (JSONException e) { e.printStackTrace(); throw new Error("Json字串不合法:" + json); } return contentValues; } }

Android-LogUtil工具類
Log日誌級別列印相關工具類

public class LogUtil {

    private LogUtil(){}

    /**
     * 列印的資訊日誌資訊
     */
    private final static String INFO = "☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻: ";

    /**
     * 列印的錯誤日誌資訊
     */
    private final static String ERROR = "✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖: ";

    /**
     * 列印的除錯日誌資訊
     */
    private final static String DEBUG = "☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠: ";

    /**
     * 列印的全面日誌資訊
     */
    private final static String VERBOSE = "▂▂▂▃▃▄▄▅▅▆▆▆▇▇: ";

    /**
     * 列印的警告日誌資訊
     */
    private final static String WARN = "!!!!!!!!!!!!!!!!!!!!!!!!!!: ";

    /**
     * 列印information日誌
     * @param tag 標籤
     * @param msg 日誌資訊
     */
    public static void i(String tag,String msg){
        Log.i(tag, INFO + msg);
    }

    /**
     * 列印information日誌
     * @param tag    標籤
     * @param msg    日誌資訊
     * @param throwable    異常
     */
    public static void i(String tag, String msg, Throwable throwable){
        Log.i(tag, INFO + msg, throwable);
    }

    /**
     * 列印verbose日誌
     * @param tag    標籤
     * @param msg    日誌資訊
     */
    public static void v(String tag, String msg){
        Log.v(tag, VERBOSE + msg);
    }

    /**
     * 列印verbose日誌
     * @param tag    標籤
     * @param msg    日誌資訊
     * @param throwable    異常
     */
    public static void v(String tag, String msg, Throwable throwable){
        Log.v(tag, VERBOSE + msg, throwable);
    }

    /**
     * 列印debug資訊
     * @param tag    標籤資訊
     * @param msg    日誌資訊
     */
    public static void d(String tag, String msg){
        Log.d(tag, DEBUG + msg);
    }

    /**
     * 列印debug日誌
     * @param tag    標籤資訊
     * @param msg    日誌資訊
     * @param throwable    異常
     */
    public static void d(String tag, String msg, Throwable throwable){
        Log.d(tag, DEBUG + msg, throwable);
    }

    /**
     * 列印warn日誌
     * @param tag    標籤資訊
     * @param msg    日誌資訊
     */
    public static void w(String tag, String msg){
        Log.w(tag, WARN + msg);
    }

    /**
     * 列印warn日誌
     * @param tag    標籤資訊
     * @param msg    日誌資訊
     * @param throwable    異常
     */
    public static void w(String tag, String msg, Throwable throwable){
        Log.w(tag, WARN + msg, throwable);
    }

    /**
     * 列印error日誌
     * @param tag
     * @param msg    標籤
     */
    public static void e(String tag, String msg){
        Log.e(tag, ERROR + msg);
    }

    /**
     * 列印error日誌
     * @param tag    標籤
     * @param msg    日誌資訊
     * @param throwable    異常
     */
    public static void e(String tag, String msg, Throwable throwable){
        Log.e(tag, ERROR + msg, throwable);
    }

    /**
     * 吐司提示
     * @param msg
     */
    public static void toast(Context mContext, String msg) {
        Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
    }

    /**
     * 吐司提示 long型別
     * @param msg
     */
    public static void toastL(Context mContext, String msg) {
        Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
    }

    /**
     * 吐司提示 自定義時間型別
     * @param msg
     */
    public static void toastD(Context mContext, String msg, int duration) {
        Toast.makeText(mContext, msg, duration).show();
    }
}

Android-MD5Util工具類
MD5 字串加密 ,檔案加密相關工具類

public class MD5Util {

    private static final String TAG = "MD5Util";

    /**
     * 預設的密碼字串組合,用來將位元組轉換成 16 進製表示的字元,apache校驗下載的檔案的正確性用的就是預設的這個組合
     */
    protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6',
            '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    protected static MessageDigest messagedigest = null;

    static {
        try {
            messagedigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException nsaex) {
            ELog.e(TAG, MD5Util.class.getName()
                    + "init failed ,MessageDigest un support MD5Util。");
            nsaex.printStackTrace();
        }
    }

    /**
     * 生成字串的md5校驗值
     * @param s
     * @return
     */
    public static String getMD5String(String s) {
        return getMD5String(s.getBytes());
    }

    /**
     * 生成字串的md5校驗值 16位
     * @param s
     * @return
     */
    public static String getMD5String16(String s) {
        return getMD5String(s.getBytes()).substring(8, 24);
    }

    /**
     * 判斷字串的md5校驗碼是否與一個已知的md5碼相匹配
     * @param password 要校驗的字串
     * @param md5PwdStr 已知的md5校驗碼
     * @return
     */
    public static boolean checkPassword(String password, String md5PwdStr) {
        String s = getMD5String(password);
        return s.equals(md5PwdStr);
    }

    /**
     * 生成檔案的md5校驗值
     * @param file
     * @return
     * @throws IOException
     */
    public static String getFileMD5String(File file) throws IOException {
        InputStream fis;
        fis = new FileInputStream(file);
        byte[] buffer = new byte[1024];
        int numRead = 0;
        while ((numRead = fis.read(buffer)) > 0) {
            messagedigest.update(buffer, 0, numRead);
        }
        fis.close();
        return bufferToHex(messagedigest.digest());
    }

    public static String getMD5String(byte[] bytes) {
        messagedigest.update(bytes);
        return bufferToHex(messagedigest.digest());
    }

    private static String bufferToHex(byte bytes[]) {
        return bufferToHex(bytes, 0, bytes.length);
    }

    private static String bufferToHex(byte bytes[], int m, int n) {
        StringBuffer stringbuffer = new StringBuffer(2 * n);
        int k = m + n;
        for (int l = m; l < k; l++) {
            appendHexPair(bytes[l], stringbuffer);
        }
        return stringbuffer.toString();
    }

    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
        char c0 = hexDigits[(bt & 0xf0) >> 4];    // 取位元組中高 4 位的數字轉換, >>> 為邏輯右移,將符號位一起右移,此處未發現兩種符號有何不同 
        char c1 = hexDigits[bt & 0xf];    // 取位元組中低 4 位的數字轉換 
        stringbuffer.append(c0);
        stringbuffer.append(c1);
    }

    /**
     * 自測方法
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(getMD5String("test"));
    }
}

Android-MeasureUtil工具類
常用測量相關的工具類:

public class MeasureUtil {

    private MeasureUtil(){}

    /**
     * 獲取控制元件的測量高度
     * @param view    控制元件
     * @return    返回測量高度(MeasuredHeight)
     */
    public static int getMeasuredHeight(View view) {
        if (view == null) {
            throw new IllegalArgumentException("view is null");
        }
        view.measure(0, 0);
        return view.getMeasuredHeight();
    }

    /**
     * 控制元件的高度
     * @param view    控制元件View
     * @return    返回控制元件的高度
     */
    public static int getHeight(View view){
        if(view == null){
            throw new IllegalArgumentException("view is null");
        }

        view.measure(0, 0);
        return view.getHeight();
    }

    /**
     * 獲取控制元件的測量寬度
     * @param view    控制元件
     * @return    返回控制元件的測量寬度
     */
    public static int getMeasuredWidth(View view){
        if(view == null){
            throw new IllegalArgumentException("view is null");
        }

        view.measure(0, 0);
        return view.getMeasuredWidth();
    }

    /**
     * 獲取控制元件的寬度
     * @param view    控制元件
     * @return    返回控制元件的寬度
     */
    public static int getWidth(View view){
        if(view == null){
            throw new IllegalArgumentException("view is null");
        }

        view.measure(0, 0);
        return view.getWidth();
    }

    /**
     * 設定高度
     * @param view    控制元件
     * @param height    高度
     */
    public static void setHeight(View view, int height) {
        if (view == null || view.getLayoutParams() == null) {
            throw new IllegalArgumentException("View LayoutParams is null");
        }
        ViewGroup.LayoutParams params = view.getLayoutParams();
        params.height = height;
        view.setLayoutParams(params);
    }

    /**
     * 設定View的寬度
     * @param view    view
     * @param width    寬度
     */
    public static void setWidth(View view, int width){
        if(view == null || view.getLayoutParams() == null){
            throw new IllegalArgumentException("View LayoutParams is null");
        }

        ViewGroup.LayoutParams params = view.getLayoutParams();
        params.width = width;
        view.setLayoutParams(params);
    }

    /**
     * 設定ListView的實際高度
     * @param listView    ListView控制元件
     */
    public static void setListHeight(ListView listView) {
        if (listView == null) {
            throw new IllegalArgumentException("ListView is null");
        }
        Adapter adapter = listView.getAdapter();
        if (adapter == null) {
            return;
        }
        int totalHeight = 0;
        int size = adapter.getCount();
        for (int i = 0; i < size; i++) {
            View listItem = adapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (size - 1));
        LogUtil.d("MeasureUtil", "listview-height--" + params.height);
        listView.setLayoutParams(params);
    }

    /**
     * 設定GridView的高度,
     * @param context    應用程式上下文
     * @param gv        GridView控制元件
     * @param n            行數
     * @param m            列數
     */
    public static void setGridViewHeight(Context context, GridView gv, int n, int m) {
        if(gv == null){
            throw new IllegalArgumentException("GridView is null");
        }
        Adapter adapter = gv.getAdapter();
        if (adapter == null) {
            return;
        }
        int totalHeight = 0;
        int size = adapter.getCount();
        for (int i = 0; i < size; i++) {
            View listItem = adapter.getView(i, null, gv);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight() + ScreenUtil.dp2px(context, m);
        }
        ViewGroup.LayoutParams params = gv.getLayoutParams();
        params.height = totalHeight + gv.getPaddingTop() + gv.getPaddingBottom() + 2;
        LogUtil.d("MeasureUtil", "gridview-height--" + params.height);
        gv.setLayoutParams(params);
    }

}

Android-NetworkUtils工具類
網路型別,網路狀態,網路制式,等相關工具類

public final class NetworkUtils {
    private NetworkUtils() {
        throw new AssertionError();
    }

    /**
     * 未找到合適匹配網路型別
     */
    public static final int TYPE_NO = 0;

    /**
     * 中國移動CMNET網路
     * 中國移動GPRS接入方式之一, 主要為PC、膝上型電腦、PDA設立
     */
    public static final int TYPE_MOBILE_CMNET = 1;

    /**
     * 中國移動CMWAP網路
     * 中國移動GPRS接入方式之一,主要為手機WAP上網而設立
     */
    public static final int TYPE_MOBILE_CMWAP = 2;

    /**
     * 中國聯通UNIWAP網路
     * 中國聯通劃分GPRS接入方式之一, 主要為手機WAP上網而設立
     */
    public static final int TYPE_MOBILE_UNIWAP = 3;

    /**
     * 中國聯通UNINET網路
     * 中國聯通劃分GPRS接入方式之一, 主要為PC、膝上型電腦、PDA設立
     */
    public static final int TYPE_MOBILE_UNINET = 6;

    /**
     * 中國聯通3GWAP網路
     */
    public static final int TYPE_MOBILE_3GWAP = 4;

    // 中國聯通3HNET網路
    public static final int TYPE_MOBLIE_3GNET = 5;

    /**
     * 中國電信CTWAP網路
     */
    public static final int TYPE_MOBILE_CTWAP = 7;

    /**
     * 中國電信CTNET網路
     */
    public static final int TYPE_MOBILE_CTNET = 8;

    /**
     * WIFI網路
     */
    public static final int TYPE_WIFI = 10;

    /**
     * 網路型別 - 無連線
     */
    public static final int NETWORK_TYPE_NO_CONNECTION = -100000;

    /**
     * 連線模式WIFI網
     */
    public static final String NETWORK_TYPE_WIFI = "WIFI";
    /**
     * 連線模式快速網
     */
    public static final String NETWORK_TYPE_FAST = "FAST";
    /**
     * 連線模式慢速網
     */
    public static final String NETWORK_TYPE_SLOW = "SLOW";
    /**
     * 連線模式wap網
     */
    public static final String NETWORK_TYPE_WAP = "WAP";
    /**
     * 連線模式unknow
     */
    public static final String NETWORK_TYPE_UNKNOWN = "UNKNOWN";
    /**
     * 無連線
     */
    public static final String NETWORK_TYPE_DISCONNECT = "DISCONNECT";

    /**
     * 獲取當前手機連線的網路型別
     *
     * @param context 上下文
     * @return int 網路型別
     */
    public static int getNetworkState(Context context) {
        int returnValue = TYPE_NO;
        // 獲取ConnectivityManager物件
        ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        // 獲得當前網路資訊
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isAvailable()) {
            // 獲取網路型別
            int currentNetWork = networkInfo.getType();
            // 手機網路型別
            if (currentNetWork == ConnectivityManager.TYPE_MOBILE) {
                if (networkInfo.getExtraInfo() != null) {
                    if (networkInfo.getExtraInfo().equals("cmnet")) {
                        returnValue = TYPE_MOBILE_CMNET;
                    }
                    if (networkInfo.getExtraInfo().equals("cmwap")) {
                        returnValue = TYPE_MOBILE_CMWAP;
                    }
                    if (networkInfo.getExtraInfo().equals("uniwap")) {
                        returnValue = TYPE_MOBILE_UNIWAP;
                    }
                    if (networkInfo.getExtraInfo().equals("3gwap")) {
                        returnValue = TYPE_MOBILE_3GWAP;
                    }
                    if (networkInfo.getExtraInfo().equals("3gnet")) {
                        returnValue = TYPE_MOBLIE_3GNET;
                    }
                    if (networkInfo.getExtraInfo().equals("uninet")) {
                        returnValue = TYPE_MOBILE_UNINET;
                    }
                    if (networkInfo.getExtraInfo().equals("ctwap")) {
                        returnValue = TYPE_MOBILE_CTWAP;
                    }
                    if (networkInfo.getExtraInfo().equals("ctnet")) {
                        returnValue = TYPE_MOBILE_CTNET;
                    }
                }
                // WIFI網路型別
            } else if (currentNetWork == ConnectivityManager.TYPE_WIFI) {
                returnValue = TYPE_WIFI;
            }
        }
        return returnValue;
    }

    /**
     * 判斷網路是否連線
     *
     * @param context 上下文
     * @return boolean 網路連線狀態
     */
    public static boolean isNetworkConnected(Context context) {
        if (context != null) {
            ConnectivityManager cm =
                    (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = cm.getActiveNetworkInfo();
            // 獲取連線物件
            if (null != info && info.isConnected()) {
                return info.getState() == State.CONNECTED;
            }
        }
        return false;
    }


    /**
     * 開啟網路設定介面
     *
     * @param activity Activity
     */
    public static void openNetSetting(Activity activity) {
        Intent intent = new Intent("/");
        ComponentName cm =
                new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");
        intent.setComponent(cm);
        intent.setAction("android.intent.action.VIEW");
        activity.startActivityForResult(intent, 0);
    }

    /**
     * 是否是用手機網路連線
     *
     * @param context 上下文
     * @return 結果
     */
    public static boolean isFlowConnect(Context context) {
        ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (null == cm || null == cm.getActiveNetworkInfo()) {
            return false;
        }
        return cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
    }

    /**
     * 是否是wifi連線
     *
     * @param context app的context
     * @return true:是wifi連線
     */
    public static boolean isWifiConnect(Context context) {
        ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (null == cm || null == cm.getActiveNetworkInfo()) {
            return false;
        }
        return cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
    }

    /**
     * 獲取網路連線型別
     *
     * @param context context
     * @return NetworkType
     */
    public static int getNetworkType(Context context) {
        ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (null == cm || null == cm.getActiveNetworkInfo()) {
            return TYPE_NO;
        }
        return cm.getActiveNetworkInfo().getType();
    }


    /**
     * 獲取網路連線型別名稱
     *
     * @param context context
     * @return NetworkTypeName
     */
    public static String getNetworkTypeName(Context context) {
        ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = cm.getActiveNetworkInfo();
        String type = NETWORK_TYPE_DISCONNECT;
        if (cm == null || info == null) {
            return type;
        }
        if (info.isConnected()) {
            String typeName = info.getTypeName();
            if ("WIFI".equalsIgnoreCase(typeName)) {
                type = NETWORK_TYPE_WIFI;
            } else if ("MOBILE".equalsIgnoreCase(typeName)) {
                String proxyHost = android.net.Proxy.getDefaultHost();
                if (StringUtil.isEmpty(proxyHost)) {
                    type = isFastMobileNetwork(context) ? NETWORK_TYPE_FAST : NETWORK_TYPE_SLOW;
                } else {
                    type = NETWORK_TYPE_WAP;
                }
            } else {
                type = NETWORK_TYPE_UNKNOWN;
            }
        }
        return type;
    }


    /**
     * Whether is fast mobile network
     *
     * @param context context
     * @return FastMobileNetwork
     */
    private static boolean isFastMobileNetwork(Context context) {
        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(
                Context.TELEPHONY_SERVICE);
        if (telephonyManager == null) {
            return false;
        }

        switch (telephonyManager.getNetworkType()) {
            case TelephonyManager.NETWORK_TYPE_EVDO_0:
            case TelephonyManager.NETWORK_TYPE_EVDO_A:
            case TelephonyManager.NETWORK_TYPE_HSDPA:
            case TelephonyManager.NETWORK_TYPE_HSPA:
            case TelephonyManager.NETWORK_TYPE_HSUPA:
            case TelephonyManager.NETWORK_TYPE_UMTS:
            case TelephonyManager.NETWORK_TYPE_EHRPD:
            case TelephonyManager.NETWORK_TYPE_EVDO_B:
            case TelephonyManager.NETWORK_TYPE_HSPAP:
            case TelephonyManager.NETWORK_TYPE_LTE:
                return true;
            default:
                return false;
        }
    }


    /**
     * 獲取當前網路的狀態
     *
     * @param context 上下文
     * @return 當前網路的狀態。具體型別可參照NetworkInfo.State.CONNECTED、NetworkInfo.State.CONNECTED.DISCONNECTED等欄位。
     * 當前沒有網路連線時返回null
     */
    public static State getCurrentNetworkState(Context context) {
        NetworkInfo info = ((ConnectivityManager) context.getSystemService(
                Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        if (null == info) {
            return null;
        }
        return info.getState();
    }


    /**
     * 獲取當前網路的型別
     *
     * @param context 上下文
     * @return 當前網路的型別。具體型別可參照ConnectivityManager中的TYPE_BLUETOOTH、TYPE_MOBILE、TYPE_WIFI等欄位。
     * 當前沒有網路連線時返回NetworkUtils.NETWORK_TYPE_NO_CONNECTION
     */
    public static int getCurrentNetworkType(Context context) {
        NetworkInfo info = ((ConnectivityManager) context.getSystemService(
                Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        return info != null ? info.getType() : NETWORK_TYPE_NO_CONNECTION;
    }


    /**
     * 獲取當前網路的具體型別
     *
     * @param context 上下文
     * @return 當前網路的具體型別。具體型別可參照TelephonyManager中的NETWORK_TYPE_1xRTT、NETWORK_TYPE_CDMA等欄位。
     * 當前沒有網路連線時返回NetworkUtils.NETWORK_TYPE_NO_CONNECTION
     */
    public static int getCurrentNetworkSubtype(Context context) {
        NetworkInfo info = ((ConnectivityManager) context.getSystemService(
                Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        return info != null ? info.getSubtype() : NETWORK_TYPE_NO_CONNECTION;
    }


    /**
     * 判斷當前網路是否已經連線
     *
     * @param context 上下文
     * @return 當前網路是否已經連線。false:尚未連線
     */
    public static boolean isConnectedByState(Context context) {
        return getCurrentNetworkState(context) == State.CONNECTED;
    }


    /**
     * 判斷當前網路是否正在連線
     *
     * @param context 上下文
     * @return 當前網路是否正在連線
     */
    public static boolean isConnectingByState(Context context) {
        return getCurrentNetworkState(context) == State.CONNECTING;
    }


    /**
     * 判斷當前網路是否已經斷開
     *
     * @param context 上下文
     * @return 當前網路是否已經斷開
     */
    public static boolean isDisconnectedByState(Context context) {
        return getCurrentNetworkState(context) == State.DISCONNECTED;
    }


    /**
     * 判斷當前網路是否正在斷開
     *
     * @param context 上下文
     * @return 當前網路是否正在斷開
     */
    public static boolean isDisconnectingByState(Context context) {
        return getCurrentNetworkState(context) == State.DISCONNECTING;
    }


    /**
     * 判斷當前網路是否已經暫停
     *
     * @param context 上下文
     * @return 當前網路是否已經暫停
     */
    public static boolean isSuspendedByState(Context context) {
        return getCurrentNetworkState(context) == State.SUSPENDED;
    }


    /**
     * 判斷當前網路是否處於未知狀態中
     *
     * @param context 上下文
     * @return 當前網路是否處於未知狀態中
     */
    public static boolean isUnknownByState(Context context) {
        return getCurrentNetworkState(context) == State.UNKNOWN;
    }


    /**
     * 判斷當前網路的型別是否是藍芽
     *
     * @param context 上下文
     * @return 當前網路的型別是否是藍芽。false:當前沒有網路連線或者網路型別不是藍芽
     */
    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
    public static boolean isBluetoothByType(Context context) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
            return false;
        } else {
            return getCurrentNetworkType(context) == ConnectivityManager.TYPE_BLUETOOTH;
        }
    }


    /**
     * 判斷當前網路的型別是否是虛擬網路
     *
     * @param context 上下文
     * @return 當前網路的型別是否是虛擬網路。false:當前沒有網路連線或者網路型別不是虛擬網路
     */
    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public static boolean isDummyByType(Context context) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
            return false;
        } else {
            return getCurrentNetworkType(context) == ConnectivityManager.TYPE_DUMMY;
        }
    }


    /**
     * 判斷當前網路的型別是否是ETHERNET
     *
     * @param context 上下文
     * @return 當前網路的型別是否是ETHERNET。false:當前沒有網路連線或者網路型別不是ETHERNET
     */
    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
    public static boolean isEthernetByType(Context context) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
            return false;
        } else {
            return getCurrentNetworkType(context) == ConnectivityManager.TYPE_ETHERNET;
        }
    }


    /**
     * 判斷當前網路的型別是否是行動網路
     *
     * @param context 上下文
     * @return 當前網路的型別是否是行動網路。false:當前沒有網路連線或者網路型別不是行動網路
     */
    public static boolean isMobileByType(Context context) {
        return getCurrentNetworkType(context) == ConnectivityManager.TYPE_MOBILE;
    }


    /**
     * 判斷當前網路的型別是否是MobileDun
     *
     * @param context 上下文
     * @re