Android 判斷網絡類型 wifi,2G,3G,4G



我之前寫了一篇關於事實監測網絡的文章,用到過這個工具類。這幾天又需要詳細的判斷網絡的類型,把這個工具類給完善一下。
這個工具類我是用的小米移動卡測試的沒有問題,電信和聯通,沒有測試所以有沒有bug也不清楚,如果有需要的同志的們,看一下,如果測試出有bug希望告知一下,共同進步

看圖。。沒有動態的。微笑。。是截屏。紅字是發生變化的。上一篇的效果


/**
 * 
 * @author cj 判斷網絡工具類
 * 
 */
public class NetUtil {
    /**
     * 沒有連接網絡
     */
    private static final int NETWORK_NONE = -1;
    /**
     * 移動網絡
     */
    private static final int NETWORK_MOBILE = 0;
    /**
     * 無線網絡
     */
    private static final int NETWORK_WIFI = 1;
    /**
     * 2G網絡
     */
    public static final int NETWORK_2G = 2;
    /**
     * 3G網絡
     */
    public static final int NETWORK_3G = 3;
    /**
     * 4G網絡
     */
    public static final int NETWORK_4G = 4;
    /**
     * 未知
     */
    public static final int NETWORK_UNKNOW = -2;
    /**
     * 定義電話管理器對象
     */
    public static TelephonyManager mTelephonyManager;
    /**
     * 定義連接管理器對象
     */
    public static ConnectivityManager mConnectivityManager;
    /**
     * 定義網絡信息對象
     */
    public static NetworkInfo mNetworkInfo;

    /**
     * 得到網絡類型
     * 
     * @param context
     * @return 網絡類型
     */
    public static int getNetWrokState(Context context) {
        // 得到連接管理器對象
        mConnectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();

        if (mNetworkInfo != null && mNetworkInfo.isConnected()) {

            if (mNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {
                return NETWORK_WIFI;
            } else if (mNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {
                return getMobileNetType(context);
            }
        }
        return NETWORK_NONE;
    }

    /**
     * 判斷是否連接上
     * 
     * @return
     */
    public static final boolean isNetConnected() {
        if (mNetworkInfo != null && mNetworkInfo.isConnected()) {
            return true;
        }
        return false;
    }

    /**
     * 獲取移動網絡的類型
     * 
     * @param context
     * @return 移動網絡類型
     */
    public static final int getMobileNetType(Context context) {

        mTelephonyManager = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        int networkType = mTelephonyManager.getNetworkType();

        return getNetworkClass(networkType);
    }

    /**
     * 判斷移動網絡的類型
     * 
     * @param networkType
     * @return 移動網絡類型
     */
    private static final int getNetworkClass(int networkType) {
        switch (networkType) {
        case TelephonyManager.NETWORK_TYPE_GPRS:
        case TelephonyManager.NETWORK_TYPE_EDGE:
        case TelephonyManager.NETWORK_TYPE_CDMA:
        case TelephonyManager.NETWORK_TYPE_1xRTT:
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return NETWORK_2G;
        case TelephonyManager.NETWORK_TYPE_UMTS:
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
        case TelephonyManager.NETWORK_TYPE_HSDPA:
        case TelephonyManager.NETWORK_TYPE_HSUPA:
        case TelephonyManager.NETWORK_TYPE_HSPA:
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
        case TelephonyManager.NETWORK_TYPE_EHRPD:
        case TelephonyManager.NETWORK_TYPE_HSPAP:
            return NETWORK_3G;
        case TelephonyManager.NETWORK_TYPE_LTE:
            return NETWORK_4G;
        default:
            return NETWORK_UNKNOW;
        }
    }
}


發佈了38 篇原創文章 · 獲贊 60 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章