一个检测网络状态的工具类(●’◡’●)
记得加上这两个权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
public class NetworkUtil {
/**
* 检测网络状态
*
* @param context
* @return
*/
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
/***
* 获取网络类型
* 0: 2g 1: 3g 2: 4g 3: wifi 4: 其他
* @param context
* @return
*/
public static int getNetworkType(Context context){
int networkType = 0;
NetworkInfo networkInfo = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()){
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI){
networkType = 3;
}else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE){
switch (networkInfo.getSubtype()){
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: //api<8 : replace by 11
networkType = 0;
break;
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: //api<9 : replace by 14
case TelephonyManager.NETWORK_TYPE_EHRPD: //api<11 : replace by 12
case TelephonyManager.NETWORK_TYPE_HSPAP: //api<13 : replace by 15
networkType = 1;
break;
case TelephonyManager.NETWORK_TYPE_LTE: //api<11 : replace by 13
networkType = 2;
break;
default:
String subTypeName = networkInfo.getSubtypeName();
if (subTypeName.equalsIgnoreCase("TD-SCDMA")
|| subTypeName.equalsIgnoreCase("WCDMA")
|| subTypeName.equalsIgnoreCase("CDMA2000"))
{
networkType = 1;
}
else
{
networkType = 4;
}
}
}
}
return networkType;
}
/**
* 判断是否是wifi
*
* @param context
* @return
*/
public static boolean isWifiConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected()
&& networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
}
return false;
}
}