package com.cheng.utils;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.content.Context;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.telephony.TelephonyManager;
/**
* 网络工具类
*/
public final class NetUtil {
/**
* 判断网络连接是否打开,包括移动数据连接
*
* @param context 上下文
* @return 是否联网
*/
public static boolean isNetworkAvailable(Context context) {
boolean netstate = false;
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == State.CONNECTED) {
netstate = true;
break;
}
}
}
}
return netstate;
}
/**
* GPS是否打开
*
* @param context 上下文
* @return Gps是否可用
*/
public static boolean isGpsEnabled(Context context) {
LocationManager lm = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
/**
* 检测当前打开的网络类型是否WIFI
*
* @param context 上下文
* @return 是否是Wifi上网
*/
public static boolean isWifi(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null
&& activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
return false;
}
/**
* 检测当前打开的网络类型是否3G
*
* @param context 上下文
* @return 是否是3G上网
*/
public static boolean is3G(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null
&& activeNetInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
return true;
}
return false;
}
/**
* 检测当前开打的网络类型是否4G
*
* @param context 上下文
* @return 是否是4G上网
*/
public static boolean is4G(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null && activeNetInfo.isConnectedOrConnecting()) {
if (activeNetInfo.getType() == TelephonyManager.NETWORK_TYPE_LTE) {
return true;
}
}
return false;
}
/**
* 只是判断WIFI
*
* @param context 上下文
* @return 是否打开Wifi
*/
public static boolean isWiFi(Context context) {
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.getState();
if (wifi == State.CONNECTED || wifi == State.CONNECTING)
return true;
return false;
}
/**
* IP地址校验
*
* @param ip 待校验是否是IP地址的字符串
* @return 是否是IP地址
*/
public static boolean isIP(String ip) {
Pattern pattern = Pattern
.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b");
Matcher matcher = pattern.matcher(ip);
return matcher.matches();
}
/**
* IP转化成int数字
*
* @param addr IP地址
* @return Integer
*/
public static int ipToInt(String addr) {
String[] addrArray = addr.split("\\.");
int num = 0;
for (int i = 0; i < addrArray.length; i++) {
int power = 3 - i;
num += ((Integer.parseInt(addrArray[i]) % 256 * Math
.pow(256, power)));
}
return num;
}
/**
* 枚举网络状态 NET_NO:没有网络 NET_2G:2g网络 NET_3G:3g网络 NET_4G:4g网络 NET_WIFI:wifi
* NET_UNKNOWN:未知网络
*/
public static enum NetState {
NET_NO, NET_2G, NET_3G, NET_4G, NET_WIFI, NET_UNKNOWN
}
;
/**
* 判断当前是否网络连接
*
* @param context 上下文
* @return 状态码
*/
public NetState isConnected(Context context) {
NetState stateCode = NetState.NET_NO;
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.isConnectedOrConnecting()) {
switch (ni.getType()) {
case ConnectivityManager.TYPE_WIFI:
stateCode = NetState.NET_WIFI;
break;
case ConnectivityManager.TYPE_MOBILE:
switch (ni.getSubtype()) {
case TelephonyManager.NETWORK_TYPE_GPRS: // 联通2g
case TelephonyManager.NETWORK_TYPE_CDMA: // 电信2g
case TelephonyManager.NETWORK_TYPE_EDGE: // 移动2g
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
stateCode = NetState.NET_2G;
break;
case TelephonyManager.NETWORK_TYPE_EVDO_A: // 电信3g
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
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:
stateCode = NetState.NET_3G;
break;
case TelephonyManager.NETWORK_TYPE_LTE:
stateCode = NetState.NET_4G;
break;
default:
stateCode = NetState.NET_UNKNOWN;
}
break;
default:
stateCode = NetState.NET_UNKNOWN;
}
}
return stateCode;
}
/**
* 获取URL中参数 并返回Map
* @param url
* @return
*/
public static Map<String, String> getUrlParams(String url) {
Map<String, String> map = null;
if (url != null && url.indexOf("&") > -1 && url.indexOf("=") > -1) {
map = new HashMap<String, String>();
String[] arrTemp = url.split("&");
for (String str : arrTemp) {
String[] qs = str.split("=");
map.put(qs[0], qs[1]);
}
}
return map;
}
}