package com.banking.xc.utils;
import skytv_com.banking.enjoymovie.MyApplication;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.net.Proxy;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
public class NetUtils {
private static final String TAG = "NetUtils";
private static final int NO_NET = 2147483647;
private static final int UNKNOWN = 2147483646;
private static final int WIFI = 2147483645;
private static final int ROAMING = 2147483644;
/**
* 网络连接使用代理:默认,优先判断用户是否用代理</br> false:使用直连方式连接网络</br> true:使用当前代理IP与PORT方式连接网
*
*/
public static boolean isProxy = true;
public static NetType getNetType() {
// if (netInfo.isRoaming()) {
// // 漫游
// }
NetType result = new NetType();//默认为空内容
ConnectivityManager connectivityManager = null;
try {
connectivityManager = (ConnectivityManager) MyApplication.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
} catch (Exception e) {
}
if (null == connectivityManager) {
return result;
}
if (!isNetworkAvailable(connectivityManager)) {
return result;
}
int summaryType = getSummaryType(connectivityManager);
NetworkInfo networkInfo = null;
try {
networkInfo = connectivityManager.getActiveNetworkInfo();
} catch (Throwable e) {
}
String extraInfo = getExtraInfo(networkInfo);
result = new NetType(summaryType, extraInfo);
return result;
// NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
//
// if (netInfo != null && netInfo.isConnected()) {
// }
}
/**
* 判断是否有网络(遍历NetworkInfo)
*/
private static boolean isNetworkAvailable(ConnectivityManager connectivityManager) {
NetworkInfo[] networkInfos = null;
try {
networkInfos = connectivityManager.getAllNetworkInfo();
} catch (Throwable e) {
}
if (networkInfos != null) {
final int length = networkInfos.length;
for (int i = 0; i < length; i++) {
boolean connected = false;
try {
connected = networkInfos[i].getState() == NetworkInfo.State.CONNECTED;
} catch (Throwable e) {
}
if (connected) {
return true;
}
}
}
return false;
}
/**
* 判断是“手机网络”还是“无线网络”
*/
public static int getSummaryType(ConnectivityManager connectivityManager) {
int result = NetType.SUMMARY_TYPE_OTHER;
// mobile
State mobile = null;
try {
mobile = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
} catch (Throwable e) {
}
// wifi
State wifi = null;
try {
wifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
} catch (Throwable e) {
}
if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) {
// mobile
result = NetType.SUMMARY_TYPE_MOBILE;
} else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) {
// wifi
result = NetType.SUMMARY_TYPE_WIFI;
}
return result;
}
/**
* 网络额外信息
*/
public static String getExtraInfo(NetworkInfo networkInfo) {
String result = "";
try {
result = networkInfo.getExtraInfo();
} catch (Throwable e) {
e.printStackTrace();
}
return result;
}
public static class NetType {
public static final int NSP_CHINA_MOBILE = 1;// 移动
public static final int NSP_CHINA_UNICOM = 2;// 联通
public static final int NSP_CHINA_TELECOM = 3;// 电信
public static final int NSP_OTHER = 0;// 其它
public static final int NSP_NO = -1;// 不可用
public static final int SUMMARY_TYPE_WIFI = 1;// WIFI
public static final int SUMMARY_TYPE_MOBILE = 2;// MOBILE
public static final int SUMMARY_TYPE_OTHER = 0;// 其它
private String extraInfo;
private int summaryType = SUMMARY_TYPE_OTHER;
private String detailType;
Integer simState;
String networkType;
String networkTypeName;
String networkOperator;
String networkOperatorName;
String proxyHost;
Integer proxyPort;
public NetType(int summaryType, String extraInfo) {
this.summaryType = summaryType;
this.extraInfo = extraInfo;
getSimAndOperatorInfo();
}
public NetType() {
}
private void getSimAndOperatorInfo() {
TelephonyManager telephonyManager = (TelephonyManager) MyApplication.getInstance().getSystemService(Context.TELEPHONY_SERVICE);
try {
simState = telephonyManager.getSimState();
} catch (Throwable e) {
}
try {
networkOperatorName = telephonyManager.getNetworkOperatorName();
} catch (Throwable e) {
}
try {
networkOperator = telephonyManager.getNetworkOperator();
} catch (Throwable e) {
}
try {
int temp = telephonyManager.getNetworkType();
networkType = "" + temp;
networkTypeName = getNetworkTypeName(temp);
} catch (Throwable e) {
}
}
public int getNSP() {
if (null == simState || simState == TelephonyManager.SIM_STATE_UNKNOWN) {
return NSP_NO;
}
if (TextUtils.isEmpty(networkOperatorName) && TextUtils.isEmpty(networkOperator)) {
return NSP_NO;
}
if (("中国移动".equalsIgnoreCase(networkOperatorName))//
|| ("CMCC".equalsIgnoreCase(networkOperatorName)) //
|| ("46000".equalsIgnoreCase(networkOperator))//
|| ("China Mobile".equalsIgnoreCase(networkOperatorName))) {
// 中国移动
return NSP_CHINA_MOBILE;
}
if (("中国电信".equalsIgnoreCase(networkOperatorName))//
|| ("China Telecom".equalsIgnoreCase(networkOperatorName))//
|| ("46003".equalsIgnoreCase(networkOperator))) {
// 中国电信
return NSP_CHINA_TELECOM;
}
if (("中国联通".equalsIgnoreCase(networkOperatorName))//
|| ("China Unicom".equalsIgnoreCase(networkOperatorName))//
|| ("46001".equalsIgnoreCase(networkOperator))//
|| ("CU-GSM".equalsIgnoreCase(networkOperatorName))) {
// 中国联通
return NSP_CHINA_UNICOM;
}
return NSP_OTHER;
}
public String getNetworkTypeName(int code) {
switch (code) {
case TelephonyManager.NETWORK_TYPE_GPRS:
return "GPRS";
case TelephonyManager.NETWORK_TYPE_EDGE:
return "EDGE";
case TelephonyManager.NETWORK_TYPE_UMTS:
return "UMTS";
case TelephonyManager.NETWORK_TYPE_HSDPA:
return "HSDPA";
case TelephonyManager.NETWORK_TYPE_HSUPA:
return "HSUPA";
case TelephonyManager.NETWORK_TYPE_HSPA:
return "HSPA";
case TelephonyManager.NETWORK_TYPE_CDMA:
return "CDMA";
case TelephonyManager.NETWORK_TYPE_EVDO_0:
return "CDMA - EvDo rev. 0";
case TelephonyManager.NETWORK_TYPE_EVDO_A:
return "CDMA - EvDo rev. A";
case TelephonyManager.NETWORK_TYPE_1xRTT:
return "CDMA - 1xRTT";
default:
return "UNKNOWN";
}
}
public String getDetailType() {
// StringBuilder sb = new StringBuilder();
return "";
}
public String getUploadType() {
return networkType;
}
public String getProxyHost() {
String proxyHost = Proxy.getDefaultHost();
if (Log.D) {
Log.d(TAG, "getProxyHost() proxyHost -->> " + proxyHost);
}
if (SUMMARY_TYPE_WIFI == summaryType) {// 魅族切换到WIFI时proxyHost仍然按切换前返回,导致需要如此处理。
if (Log.D) {
Log.d(TAG, "getProxyHost() WIFI -->> ");
}
return null;
} else {
if (Log.D) {
Log.d(TAG, "getProxyHost() else -->> ");
}
this.proxyHost = proxyHost;
this.proxyPort = Proxy.getDefaultPort();
}
if (Log.D) {
Log.d(TAG, "getProxyHost() proxyHost -->> " + proxyHost);
}
return this.proxyHost;
}
public Integer getProxyPort() {
return proxyPort;
}
}
/**
*
* public static final int NETWORK_TYPE_UNKNOWN = 0;
* public static final int NETWORK_TYPE_GPRS = 1; // 2.5G
* public static final int NETWORK_TYPE_EDGE = 2; // 2.75G (模拟器中的网络类型就是这一种)
* public static final int NETWORK_TYPE_UMTS = 3; // 3G
* public static final int NETWORK_TYPE_CDMA = 4; // 2G
* public static final int NETWORK_TYPE_EVDO_0 = 5; // 3G
* public static final int NETWORK_TYPE_EVDO_A = 6; // 3G
* public static final int NETWORK_TYPE_1xRTT = 7; // 3G
* public static final int NETWORK_TYPE_HSDPA = 8; // 3.5G
* public static final int NETWORK_TYPE_HSUPA = 9; // 3G
* public static final int NETWORK_TYPE_HSPA = 10; // 3G
* public static final int NETWORK_TYPE_EVDO_B = 12; // 3G
*/
public static boolean is2GNetwork(Context context) {
NetType netType = getNetType();
if(netType.summaryType == NetType.SUMMARY_TYPE_WIFI) {
return false;
}
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int type = telephonyManager.getNetworkType();
if(Log.D) {
Log.d(TAG, "Net work type:" + type);
}
if(TelephonyManager.NETWORK_TYPE_CDMA == type || TelephonyManager.NETWORK_TYPE_GPRS == type || TelephonyManager.NETWORK_TYPE_EDGE == type) {
return true;
}
return false;
}
/**
* 判断是否是wifi环境
* @return
*/
public static boolean isWifi() {
NetType netType = getNetType();
if(netType.summaryType == NetType.SUMMARY_TYPE_WIFI) {
return true;
}
return false;
}
}