App網(wǎng)絡(luò)管理

安卓開發(fā)一般都需要進(jìn)行日志管理,常用操作老司機(jī)已為你封裝完畢舰攒,你可以用這份工具進(jìn)行管理,具體可以查看源碼悔醋,現(xiàn)在為你開車摩窃,Demo傳送門

站點(diǎn)

系統(tǒng)日志輸出工具類 → AppKeyBoardMgr

getNetworkState                  : 獲取當(dāng)前手機(jī)連接的網(wǎng)絡(luò)類型
isNetworkConnected           : 判斷網(wǎng)絡(luò)是否連接
openNetSetting                    : 打開網(wǎng)絡(luò)設(shè)置界面
is3gConnected                    : 檢測(cè)3G是否連接
getNetworkTypeName         : 獲取網(wǎng)絡(luò)類型名稱
getCurrentNetworkState       : 獲取當(dāng)前網(wǎng)絡(luò)的狀態(tài)
getCurrentNetworkSubtype  : 獲取當(dāng)前網(wǎng)絡(luò)的具體類型
isConnectedByState             : 判斷當(dāng)前網(wǎng)絡(luò)是否已經(jīng)連接
isConnectingByState            : 判斷當(dāng)前網(wǎng)絡(luò)是否正在連接
isDisconnectedByState        : 判斷當(dāng)前網(wǎng)絡(luò)是否已經(jīng)斷開
isDisconnectingByState       : 判斷當(dāng)前網(wǎng)絡(luò)是否正在斷開
isSuspendedByState            : 判斷當(dāng)前網(wǎng)絡(luò)是否已經(jīng)暫停
isUnknownByState               : 判斷當(dāng)前網(wǎng)絡(luò)是否處于未知狀態(tài)中
isBluetoothByType               : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是藍(lán)牙
isDummyByType                  : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是虛擬網(wǎng)絡(luò)
isEthernetByType                 : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是ETHERNET
isMobileByType                    : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是移動(dòng)網(wǎng)絡(luò)
isMobileDunByType            : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是MobileDun
isMobileHipriByType           : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是MobileHipri
isMobileMmsByType           : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是MobileMms
isMobileSuplByType            : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是MobileSupl
isWifiByType                        : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是Wifi
isWimaxByType                   : 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是Wimax
is1XRTTBySubtype             : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是1XRTT
isCDMABySubtype              : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是CDMA(Either IS95A or IS95B)
isEDGEBySubtype               : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EDGE
isEHRPDBySubtype             :  判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EHRPD
isEVDO_0BySubtype           : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EVDO_0
isEVDO_ABySubtype          : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EVDO_A
isEVDO_BBySubtype          : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EDGE
isGPRSBySubtype              : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是GPRS
isHSDPABySubtype             : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSDPA
isHSPABySubtype               : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSPA
isHSPAPBySubtype             : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSPAP
isHSUPABySubtype             : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSUPA
isIDENBySubtype                 : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是IDEN
isLTEBySubtype                   : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是LTE
isUMTSBySubtype                : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是UMTS
isUNKNOWNBySubtype       : 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是UNKNOWN
isChinaMobile2G                   : 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)移動(dòng)2G網(wǎng)絡(luò)
isChinaUnicom2G                  : 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)聯(lián)通2G網(wǎng)絡(luò)
isChinaUnicom3G                  : 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)聯(lián)通3G網(wǎng)絡(luò)
isChinaTelecom2G                 : 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)電信2G網(wǎng)絡(luò)
isChinaTelecom3G                 : 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)電信3G網(wǎng)絡(luò)
getWifiState                            : 獲取Wifi的狀態(tài)芬骄,需要ACCESS_WIFI_STATE權(quán)限
isWifiOpen                              : 判斷Wifi是否打開猾愿,需要ACCESS_WIFI_STATE權(quán)限
setWifi                                     : 設(shè)置Wifi,需要CHANGE_WIFI_STATE權(quán)限
isMobileNetworkOpen             : 判斷移動(dòng)網(wǎng)絡(luò)是否打開账阻,需要ACCESS_NETWORK_STATE權(quán)限
getIpAddress                            : 獲取本機(jī)IP地址
setDataEnabled                       : 設(shè)置數(shù)據(jù)流量狀態(tài)
getWifiScanResults                 : 獲取wifi列表
getScanResultsByBSSID        : 過(guò)濾掃描結(jié)果
getWifiConnectionInfo             : 獲取wifi連接信息
getProxy                                  : 獲得Proxy地址

具體路線

public class AppNetworkMgr {
//未找到合適匹配網(wǎng)絡(luò)類型
public static final int TYPE_NO = 0;

//中國(guó)移動(dòng)CMNET網(wǎng)絡(luò)(中國(guó)移動(dòng)GPRS接入方式之一, 主要為PC蒂秘、筆記本電腦、PDA設(shè)立)
public static final int TYPE_MOBILE_CMNET = 1;

//中國(guó)移動(dòng)CMWAP網(wǎng)絡(luò)(中國(guó)移動(dòng)GPRS接入方式之一,主要為手機(jī)WAP上網(wǎng)而設(shè)立)
public static final int TYPE_MOBILE_CMWAP = 2;

//中國(guó)聯(lián)通UNIWAP網(wǎng)絡(luò)(中國(guó)聯(lián)通劃分GPRS接入方式之一, 主要為手機(jī)WAP上網(wǎng)而設(shè)立)
public static final int TYPE_MOBILE_UNIWAP = 3;

//中國(guó)聯(lián)通3GWAP網(wǎng)絡(luò)
public static final int TYPE_MOBILE_3GWAP = 4;

//中國(guó)聯(lián)通3HNET網(wǎng)絡(luò)
public static final int TYPE_MOBLIE_3GNET = 5;

//中國(guó)聯(lián)通UNINET網(wǎng)絡(luò)(中國(guó)聯(lián)通劃分GPRS接入方式之一, 主要為PC淘太、筆記本電腦姻僧、PDA設(shè)立)
public static final int TYPE_MOBILE_UNINET = 6;

//中國(guó)電信CTWAP網(wǎng)絡(luò)
public static final int TYPE_MOBILE_CTWAP = 7;

//中國(guó)電信CTNET網(wǎng)絡(luò)
public static final int TYPE_MOBILE_CTNET = 8;

//WIFI網(wǎng)絡(luò)
public static final int TYPE_WIFI = 10;

/**
 * 網(wǎng)絡(luò)類型 - 無(wú)連接
 */
public static final int NETWORK_TYPE_NO_CONNECTION = -1231545315;

public static final String NETWORK_TYPE_WIFI = "wifi";
public static final String NETWORK_TYPE_3G = "eg";
public static final String NETWORK_TYPE_2G = "2g";
public static final String NETWORK_TYPE_WAP = "wap";
public static final String NETWORK_TYPE_UNKNOWN = "unknown";
public static final String NETWORK_TYPE_DISCONNECT = "disconnect";

/**
 * 獲取當(dāng)前手機(jī)連接的網(wǎng)絡(luò)類型
 *
 * @param context 上下文
 * @return int 網(wǎng)絡(luò)類型
 */
public static int getNetworkState(Context context) {
    //獲取ConnectivityManager對(duì)象
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    //獲得當(dāng)前網(wǎng)絡(luò)信息
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isAvailable()) {
        //獲取網(wǎng)絡(luò)類型
        int currentNetWork = networkInfo.getType();
        //手機(jī)網(wǎng)絡(luò)類型
        if (currentNetWork == ConnectivityManager.TYPE_MOBILE) {
            if(networkInfo.getExtraInfo() != null){
                if (networkInfo.getExtraInfo().equals("cmnet")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "當(dāng)前網(wǎng)絡(luò)為中國(guó)移動(dòng)CMNET網(wǎng)絡(luò)");
                    return TYPE_MOBILE_CMNET;
                }
                if (networkInfo.getExtraInfo().equals("cmwap")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "當(dāng)前網(wǎng)絡(luò)為中國(guó)移動(dòng)CMWAP網(wǎng)絡(luò)");
                    return TYPE_MOBILE_CMWAP;
                }
                if(networkInfo.getExtraInfo().equals("uniwap")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "當(dāng)前網(wǎng)絡(luò)為中國(guó)聯(lián)通UNIWAP網(wǎng)絡(luò)");
                    return TYPE_MOBILE_UNIWAP;
                }
                if(networkInfo.getExtraInfo().equals("3gwap")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "當(dāng)前網(wǎng)絡(luò)為中國(guó)聯(lián)通3GWAP網(wǎng)絡(luò)");
                    return TYPE_MOBILE_3GWAP;
                }
                if(networkInfo.getExtraInfo().equals("3gnet")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "當(dāng)前網(wǎng)絡(luò)為中國(guó)聯(lián)通3GNET網(wǎng)絡(luò)");
                    return TYPE_MOBLIE_3GNET;
                }
                if(networkInfo.getExtraInfo().equals("uninet")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "當(dāng)前網(wǎng)絡(luò)為中國(guó)聯(lián)通UNINET網(wǎng)絡(luò)");
                    return TYPE_MOBILE_UNINET;
                }
                if(networkInfo.getExtraInfo().equals("ctwap")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "當(dāng)前網(wǎng)絡(luò)為中國(guó)電信CTWAP網(wǎng)絡(luò)");
                    return TYPE_MOBILE_UNINET;
                }
                if(networkInfo.getExtraInfo().equals("ctnet")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "當(dāng)前網(wǎng)絡(luò)為中國(guó)電信CTNET網(wǎng)絡(luò)");
                    return TYPE_MOBILE_UNINET;
                }
            }
            //WIFI網(wǎng)絡(luò)類型
        }else if (currentNetWork == ConnectivityManager.TYPE_WIFI) {
            AppLogMessageMgr.i("AppNetworkMgr", "當(dāng)前網(wǎng)絡(luò)為WIFI網(wǎng)絡(luò)");
            return TYPE_WIFI;
        }
    }
    AppLogMessageMgr.i("AppNetworkMgr-->>NetworkUtils", "當(dāng)前網(wǎng)絡(luò)為不是我們考慮的網(wǎng)絡(luò)");
    return TYPE_NO;
}

/**
 * 判斷網(wǎng)絡(luò)是否連接
 *
 * @param context 上下文
 * @return boolean 網(wǎng)絡(luò)連接狀態(tài)
 */
public static boolean isNetworkConnected(Context context) {
    if (context != null) {
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
        //獲取連接對(duì)象
        if (mNetworkInfo != null) {
            //判斷是TYPE_MOBILE網(wǎng)絡(luò)
            if(ConnectivityManager.TYPE_MOBILE == mNetworkInfo.getType()){
                AppLogMessageMgr.i("AppNetworkMgr", "網(wǎng)絡(luò)連接類型為:TYPE_MOBILE");
                //判斷移動(dòng)網(wǎng)絡(luò)連接狀態(tài)
                State STATE_MOBILE = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
                if (STATE_MOBILE == State.CONNECTED) {
                    AppLogMessageMgr.i("AppNetworkMgrd", "網(wǎng)絡(luò)連接類型為:TYPE_MOBILE, 網(wǎng)絡(luò)連接狀態(tài)CONNECTED成功!");
                    return mNetworkInfo.isAvailable();
                }
            }
            //判斷是TYPE_WIFI網(wǎng)絡(luò)
            if(ConnectivityManager.TYPE_WIFI == mNetworkInfo.getType()){
                AppLogMessageMgr.i("AppNetworkMgr", "網(wǎng)絡(luò)連接類型為:TYPE_WIFI");
                //判斷WIFI網(wǎng)絡(luò)狀態(tài)
                State STATE_WIFI = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
                if (STATE_WIFI == State.CONNECTED) {
                    AppLogMessageMgr.i("AppNetworkMgr", "網(wǎng)絡(luò)連接類型為:TYPE_WIFI, 網(wǎng)絡(luò)連接狀態(tài)CONNECTED成功蒲牧!");
                    return mNetworkInfo.isAvailable();
                }
            }
        }
    }
    return false;
}

/**
 * 判斷網(wǎng)絡(luò)是否連接
 *
 * @param activity Activity
 * @return boolean 網(wǎng)絡(luò)連接狀態(tài)
 */
public static boolean isNetworkConnected(Activity activity){
    boolean falg = false;
    ConnectivityManager mConnectivityManager = (ConnectivityManager) activity.getApplicationContext().getSystemService("connectivity");
    if (mConnectivityManager == null){
        return falg;
    }
    NetworkInfo[] arrayOfNetworkInfo = mConnectivityManager.getAllNetworkInfo();
    if (arrayOfNetworkInfo != null){
        for (int j = 0; j < arrayOfNetworkInfo.length; j++){
            if (arrayOfNetworkInfo[j].getState() == State.CONNECTED){
                falg = true;
                break;
            }
        }
    }
    return falg;
}

/**
 * 打開網(wǎng)絡(luò)設(shè)置界面
 *
 * @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);
}

/**
 * 檢測(cè)3G是否連接
 *
 * @param context 上下文
 * @return 結(jié)果
 */
public static boolean is3gConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm != null) {
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        if (networkInfo != null
            && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
            return true;
        }
    }
    return false;
}

/**
 * Get network type
 *
 * @param context context
 * @return NetworkType
 */
public static int getNetworkType(Context context) {
    ConnectivityManager connectivityManager
        = (ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connectivityManager == null
        ? null
        : connectivityManager.getActiveNetworkInfo();
    return networkInfo == null ? -1 : networkInfo.getType();
}


/**
 * Get network type name
 *
 * @param context context
 * @return NetworkTypeName
 */
public static String getNetworkTypeName(Context context) {
    ConnectivityManager manager
        = (ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo;
    String type = NETWORK_TYPE_DISCONNECT;
    if (manager == null ||
        (networkInfo = manager.getActiveNetworkInfo()) == null) {
        return type;
    }
    ;

    if (networkInfo.isConnected()) {
        String typeName = networkInfo.getTypeName();
        if ("WIFI".equalsIgnoreCase(typeName)) {
            type = NETWORK_TYPE_WIFI;
        }
        else if ("MOBILE".equalsIgnoreCase(typeName)) {
            String proxyHost = android.net.Proxy.getDefaultHost();
            type = TextUtils.isEmpty(proxyHost)
                ? (isFastMobileNetwork(context)
                ? NETWORK_TYPE_3G
                : NETWORK_TYPE_2G)
                : 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_1xRTT:
            return false;
        case TelephonyManager.NETWORK_TYPE_CDMA:
            return false;
        case TelephonyManager.NETWORK_TYPE_EDGE:
            return false;
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
            return true;
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
            return true;
        case TelephonyManager.NETWORK_TYPE_GPRS:
            return false;
        case TelephonyManager.NETWORK_TYPE_HSDPA:
            return true;
        case TelephonyManager.NETWORK_TYPE_HSPA:
            return true;
        case TelephonyManager.NETWORK_TYPE_HSUPA:
            return true;
        case TelephonyManager.NETWORK_TYPE_UMTS:
            return true;
        case TelephonyManager.NETWORK_TYPE_EHRPD:
            return true;
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
            return true;
        case TelephonyManager.NETWORK_TYPE_HSPAP:
            return true;
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return false;
        case TelephonyManager.NETWORK_TYPE_LTE:
            return true;
        case TelephonyManager.NETWORK_TYPE_UNKNOWN:
            return false;
        default:
            return false;
    }
}


/**
 * 獲取當(dāng)前網(wǎng)絡(luò)的狀態(tài)
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的狀態(tài)撇贺。具體類型可參照NetworkInfo.State.CONNECTED、NetworkInfo.State.CONNECTED.DISCONNECTED等字段造成。當(dāng)前沒(méi)有網(wǎng)絡(luò)連接時(shí)返回null
 */
public static NetworkInfo.State getCurrentNetworkState(Context context) {
    NetworkInfo networkInfo
        = ((ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    return networkInfo != null ? networkInfo.getState() : null;
}


/**
 * 獲取當(dāng)前網(wǎng)絡(luò)的類型
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型显熏。具體類型可參照ConnectivityManager中的TYPE_BLUETOOTH、TYPE_MOBILE晒屎、TYPE_WIFI等字段喘蟆。當(dāng)前沒(méi)有網(wǎng)絡(luò)連接時(shí)返回NetworkUtils.NETWORK_TYPE_NO_CONNECTION
 */
public static int getCurrentNetworkType(Context context) {
    NetworkInfo networkInfo
        = ((ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    return networkInfo != null
        ? networkInfo.getType()
        : NETWORK_TYPE_NO_CONNECTION;
}


/**
 * 獲取當(dāng)前網(wǎng)絡(luò)的具體類型
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的具體類型。具體類型可參照TelephonyManager中的NETWORK_TYPE_1xRTT鼓鲁、NETWORK_TYPE_CDMA等字段蕴轨。當(dāng)前沒(méi)有網(wǎng)絡(luò)連接時(shí)返回NetworkUtils.NETWORK_TYPE_NO_CONNECTION
 */
public static int getCurrentNetworkSubtype(Context context) {
    NetworkInfo networkInfo
        = ((ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    return networkInfo != null
        ? networkInfo.getSubtype()
        : NETWORK_TYPE_NO_CONNECTION;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否已經(jīng)連接
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)是否已經(jīng)連接。false:尚未連接
 */
public static boolean isConnectedByState(Context context) {
    return getCurrentNetworkState(context) == NetworkInfo.State.CONNECTED;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否正在連接
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)是否正在連接
 */
public static boolean isConnectingByState(Context context) {
    return getCurrentNetworkState(context) == NetworkInfo.State.CONNECTING;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否已經(jīng)斷開
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)是否已經(jīng)斷開
 */
public static boolean isDisconnectedByState(Context context) {
    return getCurrentNetworkState(context) ==
        NetworkInfo.State.DISCONNECTED;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否正在斷開
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)是否正在斷開
 */
public static boolean isDisconnectingByState(Context context) {
    return getCurrentNetworkState(context) ==
        NetworkInfo.State.DISCONNECTING;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否已經(jīng)暫停
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)是否已經(jīng)暫停
 */
public static boolean isSuspendedByState(Context context) {
    return getCurrentNetworkState(context) == NetworkInfo.State.SUSPENDED;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否處于未知狀態(tài)中
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)是否處于未知狀態(tài)中
 */
public static boolean isUnknownByState(Context context) {
    return getCurrentNetworkState(context) == NetworkInfo.State.UNKNOWN;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是藍(lán)牙
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是藍(lán)牙骇吭。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是藍(lán)牙
 */
@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;
    }
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是虛擬網(wǎng)絡(luò)
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是虛擬網(wǎng)絡(luò)橙弱。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是虛擬網(wǎng)絡(luò)
 */
@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;
    }
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是ETHERNET
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是ETHERNET。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是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;
    }
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是移動(dòng)網(wǎng)絡(luò)
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是移動(dòng)網(wǎng)絡(luò)。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是移動(dòng)網(wǎng)絡(luò)
 */
public static boolean isMobileByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是MobileDun
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是MobileDun棘脐。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是MobileDun
 */
public static boolean isMobileDunByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE_DUN;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是MobileHipri
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是MobileHipri斜筐。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是MobileHipri
 */
public static boolean isMobileHipriByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE_HIPRI;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是MobileMms
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是MobileMms。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是MobileMms
 */
public static boolean isMobileMmsByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE_MMS;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是MobileSupl
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是MobileSupl蛀缝。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是MobileSupl
 */
public static boolean isMobileSuplByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE_SUPL;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是Wifi
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是Wifi顷链。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是wifi
 */
public static boolean isWifiByType(Context context) {
    return getCurrentNetworkType(context) == ConnectivityManager.TYPE_WIFI;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的類型是否是Wimax
 *
 * @param context 上下文
 * @return 當(dāng)前網(wǎng)絡(luò)的類型是否是Wimax。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者網(wǎng)絡(luò)類型不是Wimax
 */
public static boolean isWimaxByType(Context context) {
    return getCurrentNetworkType(context) == ConnectivityManager.TYPE_WIMAX;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是1XRTT
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是1XRTT屈梁。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是1XRTT
 */
public static boolean is1XRTTBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_1xRTT;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是CDMA(Either IS95A or IS95B)
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是CDMA嗤练。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是CDMA
 */
public static boolean isCDMABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_CDMA;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EDGE
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是EDGE。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是EDGE
 */
public static boolean isEDGEBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_EDGE;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EHRPD
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是EHRPD在讶。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是EHRPD
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static boolean isEHRPDBySubtype(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
        return false;
    }
    else {
        return getCurrentNetworkSubtype(context) ==
            TelephonyManager.NETWORK_TYPE_EHRPD;
    }
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EVDO_0
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是EVDO_0煞抬。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是EVDO_0
 */
public static boolean isEVDO_0BySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_EVDO_0;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EVDO_A
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是EVDO_A。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是EVDO_A
 */
public static boolean isEVDO_ABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_EVDO_A;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是EDGE
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是EVDO_B构哺。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是EVDO_B
 */
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public static boolean isEVDO_BBySubtype(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) {
        return false;
    }
    else {
        return getCurrentNetworkSubtype(context) ==
            TelephonyManager.NETWORK_TYPE_EVDO_B;
    }
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是GPRS
 * EVDO_Bam context 上下文
 *
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是GPRS革答。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是GPRS
 */
public static boolean isGPRSBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_GPRS;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSDPA
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSDPA。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是HSDPA
 */
public static boolean isHSDPABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_HSDPA;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSPA
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSPA遮婶。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是HSPA
 */
public static boolean isHSPABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_HSPA;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSPAP
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSPAP蝗碎。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是HSPAP
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
public static boolean isHSPAPBySubtype(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
        return false;
    }
    else {
        return getCurrentNetworkSubtype(context) ==
            TelephonyManager.NETWORK_TYPE_HSPAP;
    }
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSUPA
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是HSUPA湖笨。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是HSUPA
 */
public static boolean isHSUPABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_HSUPA;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是IDEN
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是IDEN旗扑。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是IDEN
 */
public static boolean isIDENBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_IDEN;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是LTE
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是LTE。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是LTE
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static boolean isLTEBySubtype(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
        return false;
    }
    else {
        return getCurrentNetworkSubtype(context) ==
            TelephonyManager.NETWORK_TYPE_LTE;
    }
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是UMTS
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是UMTS慈省。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是UMTS
 */
public static boolean isUMTSBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_UMTS;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)的具體類型是否是UNKNOWN
 *
 * @param context 上下文
 * @return false:當(dāng)前網(wǎng)絡(luò)的具體類型是否是UNKNOWN臀防。false:當(dāng)前沒(méi)有網(wǎng)絡(luò)連接或者具體類型不是UNKNOWN
 */
public static boolean isUNKNOWNBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_UNKNOWN;
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)移動(dòng)2G網(wǎng)絡(luò)
 *
 * @param context 上下文
 * @return false:不是中國(guó)移動(dòng)2G網(wǎng)絡(luò)或者當(dāng)前沒(méi)有網(wǎng)絡(luò)連接
 */
public static boolean isChinaMobile2G(Context context) {
    return isEDGEBySubtype(context);
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)聯(lián)通2G網(wǎng)絡(luò)
 *
 * @param context 上下文
 * @return false:不是中國(guó)聯(lián)通2G網(wǎng)絡(luò)或者當(dāng)前沒(méi)有網(wǎng)絡(luò)連接
 */
public static boolean isChinaUnicom2G(Context context) {
    return isGPRSBySubtype(context);
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)聯(lián)通3G網(wǎng)絡(luò)
 *
 * @param context 上下文
 * @return false:不是中國(guó)聯(lián)通3G網(wǎng)絡(luò)或者當(dāng)前沒(méi)有網(wǎng)絡(luò)連接
 */
public static boolean isChinaUnicom3G(Context context) {
    return isHSDPABySubtype(context) || isUMTSBySubtype(context);
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)電信2G網(wǎng)絡(luò)
 *
 * @param context 上下文
 * @return false:不是中國(guó)電信2G網(wǎng)絡(luò)或者當(dāng)前沒(méi)有網(wǎng)絡(luò)連接
 */
public static boolean isChinaTelecom2G(Context context) {
    return isCDMABySubtype(context);
}


/**
 * 判斷當(dāng)前網(wǎng)絡(luò)是否是中國(guó)電信3G網(wǎng)絡(luò)
 *
 * @param context 上下文
 * @return false:不是中國(guó)電信3G網(wǎng)絡(luò)或者當(dāng)前沒(méi)有網(wǎng)絡(luò)連接
 */
public static boolean isChinaTelecom3G(Context context) {
    return isEVDO_0BySubtype(context) || isEVDO_ABySubtype(context) ||
        isEVDO_BBySubtype(context);
}


/**
 * 獲取Wifi的狀態(tài),需要ACCESS_WIFI_STATE權(quán)限
 *
 * @param context 上下文
 * @return 取值為WifiManager中的WIFI_STATE_ENABLED边败、WIFI_STATE_ENABLING袱衷、WIFI_STATE_DISABLED、WIFI_STATE_DISABLING笑窜、WIFI_STATE_UNKNOWN之一
 * @throws Exception 沒(méi)有找到wifi設(shè)備
 */
public static int getWifiState(Context context) throws Exception {
    WifiManager wifiManager = ((WifiManager) context.getSystemService(
        Context.WIFI_SERVICE));
    if (wifiManager != null) {
        return wifiManager.getWifiState();
    }
    else {
        throw new Exception("wifi device not found!");
    }
}

/**
 * 判斷Wifi是否打開致燥,需要ACCESS_WIFI_STATE權(quán)限
 *
 * @param context 上下文
 * @return true:打開;false:關(guān)閉
 */
public static boolean isWifiOpen(Context context) throws Exception {
    int wifiState = getWifiState(context);
    return wifiState == WifiManager.WIFI_STATE_ENABLED ||
        wifiState == WifiManager.WIFI_STATE_ENABLING
        ? true
        : false;
}


/**
 * 設(shè)置Wifi排截,需要CHANGE_WIFI_STATE權(quán)限
 *
 * @param context 上下文
 * @param enable wifi狀態(tài)
 * @return 設(shè)置是否成功
 */
public static boolean setWifi(Context context, boolean enable)
    throws Exception {
    //如果當(dāng)前wifi的狀態(tài)和要設(shè)置的狀態(tài)不一樣
    if (isWifiOpen(context) != enable) {
        ((WifiManager) context.getSystemService(
            Context.WIFI_SERVICE)).setWifiEnabled(enable);
    }
    return true;
}

/**
 * 判斷移動(dòng)網(wǎng)絡(luò)是否打開嫌蚤,需要ACCESS_NETWORK_STATE權(quán)限
 *
 * @param context 上下文
 * @return true:打開;false:關(guān)閉
 */
public static boolean isMobileNetworkOpen(Context context) {
    return (((ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE)).getNetworkInfo(
        ConnectivityManager.TYPE_MOBILE)).isConnected();
}

/**
 * 獲取本機(jī)IP地址
 *
 * @return null:沒(méi)有網(wǎng)絡(luò)連接
 */
public static String getIpAddress() {
    try {
        NetworkInterface nerworkInterface;
        InetAddress inetAddress;
        for (Enumeration<NetworkInterface> en
             = NetworkInterface.getNetworkInterfaces();
             en.hasMoreElements(); ) {
            nerworkInterface = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr
                 = nerworkInterface.getInetAddresses();
                 enumIpAddr.hasMoreElements(); ) {
                inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
        return null;
    } catch (SocketException ex) {
        ex.printStackTrace();
        return null;
    }
}

/**
 * 設(shè)置數(shù)據(jù)流量狀態(tài)
 * @param context
 * @param enabled
 */
public static void setDataEnabled(Context context, boolean enabled) {
    ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Class<?> conMgrClass = null;
    Field iConMgrField = null;
    Object iConMgr = null;
    Class<?> iConMgrClass = null;
    Method setMobileDataEnabledMethod = null;
    try {
        conMgrClass = Class.forName(conMgr.getClass().getName());
        iConMgrField = conMgrClass.getDeclaredField("mService");
        iConMgrField.setAccessible(true);
        iConMgr = iConMgrField.get(conMgr);
        iConMgrClass = Class.forName(iConMgr.getClass().getName());
        setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
        setMobileDataEnabledMethod.setAccessible(true);
        setMobileDataEnabledMethod.invoke(iConMgr, enabled);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 獲取wifi列表
 * @param context
 * @return
 */
public static List<ScanResult> getWifiScanResults(Context context) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    return wifiManager.startScan() ? wifiManager.getScanResults() : null;
}

/**
 * 過(guò)濾掃描結(jié)果
 * @param context
 * @param bssid
 * @return
 */
public static ScanResult getScanResultsByBSSID(Context context, String bssid) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    ScanResult scanResult = null;
    boolean f = wifiManager.startScan();
    if (!f) {
        getScanResultsByBSSID(context, bssid);
    }
    List<ScanResult> list = wifiManager.getScanResults();
    if (list != null) {
        for (int i = 0; i < list.size(); i++) {
            scanResult = list.get(i);
            if (scanResult.BSSID.equals(bssid)) {
                break;
            }
        }
    }
    return scanResult;
}

/**
 * 獲取wifi連接信息
 * @param context
 * @return
 */
public static WifiInfo getWifiConnectionInfo(Context context) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    return wifiManager.getConnectionInfo();
}

/**
 * 獲得Proxy地址
 *
 * @param context 上下文
 * @return Proxy地址
 */
public static String getProxy(Context context) {
    String proxy = null;
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager != null) {
        NetworkInfo networkinfo = connectivityManager.getActiveNetworkInfo();
        if (networkinfo != null && networkinfo.isAvailable()) {
            String stringExtraInfo = networkinfo.getExtraInfo();
            if (stringExtraInfo != null && ("cmwap".equals(stringExtraInfo) || "uniwap".equals(stringExtraInfo))) {
                proxy = "10.0.0.172:80";
            } else if (stringExtraInfo != null && "ctwap".equals(stringExtraInfo)) {
                proxy = "10.0.0.200:80";
            }
        }
    }
    return proxy;
}

}

終點(diǎn)站

好了断傲,終點(diǎn)站到了脱吱,如果對(duì)本次旅途滿意的話,請(qǐng)給五星好評(píng)哦认罩,沒(méi)關(guān)注的小伙伴輕輕點(diǎn)個(gè)上方的關(guān)注箱蝠,畢竟老司機(jī)犧牲了很多時(shí)間才換來(lái)這么一份工具類,如果該工具類依賴其他工具類,都可以在我的史上最全的常用開發(fā)工具類收集(持續(xù)更新中)中找到宦搬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牙瓢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子间校,更是在濱河造成了極大的恐慌一罩,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撇簿,死亡現(xiàn)場(chǎng)離奇詭異聂渊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)四瘫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門汉嗽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人找蜜,你說(shuō)我怎么就攤上這事饼暑。” “怎么了洗做?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵弓叛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我诚纸,道長(zhǎng)撰筷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任畦徘,我火速辦了婚禮毕籽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘井辆。我一直安慰自己关筒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布杯缺。 她就那樣靜靜地躺著蒸播,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萍肆。 梳的紋絲不亂的頭發(fā)上袍榆,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音匾鸥,去河邊找鬼蜡塌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛勿负,可吹牛的內(nèi)容都是我干的馏艾。 我是一名探鬼主播劳曹,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼琅摩!你這毒婦竟也來(lái)了铁孵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤房资,失蹤者是張志新(化名)和其女友劉穎蜕劝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轰异,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岖沛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搭独。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婴削。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牙肝,靈堂內(nèi)的尸體忽然破棺而出唉俗,到底是詐尸還是另有隱情,我是刑警寧澤配椭,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布虫溜,位于F島的核電站,受9級(jí)特大地震影響股缸,放射性物質(zhì)發(fā)生泄漏艰管。R本人自食惡果不足惜疚鲤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一州弟、第九天 我趴在偏房一處隱蔽的房頂上張望渊季。 院中可真熱鬧越走,春花似錦音婶、人聲如沸赔硫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)陨献。三九已至,卻和暖如春懂更,著一層夾襖步出監(jiān)牢的瞬間眨业,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工沮协, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留龄捡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓慷暂,卻偏偏與公主長(zhǎng)得像聘殖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,500評(píng)論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法奸腺,類相關(guān)的語(yǔ)法餐禁,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法突照,異常的語(yǔ)法帮非,線程的語(yǔ)...
    子非魚_t_閱讀 31,581評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)讹蘑,斷路器末盔,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 軟件工程流程以及工具整理 產(chǎn)品設(shè)計(jì) 文檔管理 禪道 設(shè)計(jì)評(píng)審 禪道 開發(fā)設(shè)計(jì) 設(shè)計(jì)文檔 禪道 設(shè)計(jì)評(píng)審 軟件開發(fā) ...
    zy17閱讀 570評(píng)論 0 1
  • 郭相麟 我心中的花朵綻放了 是那么的嬌嫩 是那么的動(dòng)人 是那么的純潔 我此刻感覺(jué)幸福是如此單純 沒(méi)有讓我感覺(jué)到絲毫...
    郭相麟閱讀 188評(píng)論 0 0