package com.threeH.MyExhibition.tools;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.telephony.TelephonyManager;
/**
* @author brain
* @Description:用于判断手机网络连接状态的工具类.
* @Date 2011-12-14 下午12:09:12
*/
public class NetworkHelper {
public static final int TYPE_WIFI = 0;
public static final int TYPE_FAST_MOBILE = 1;
public static final int TYPE_NORMAL_MOBILE = 2;
private Context mCon;
private static NetworkHelper mNetHelper;
public NetworkHelper(Context mCon) {
this.mCon = mCon;
}
public static NetworkHelper getInstance(Context mCon) {
if (mNetHelper == null) {
mNetHelper = new NetworkHelper(mCon);
}
return mNetHelper;
}
/**
* 判断手机是否处于连接网络或断网状态.
*/
public boolean isConnected() {
ConnectivityManager mConManager = (ConnectivityManager) mCon.getSystemService(Context.CONNECTIVITY_SERVICE);
if (mConManager != null) {
NetworkInfo info = mConManager.getActiveNetworkInfo();
if (info != null && info.isConnectedOrConnecting()) {
if (info.getState() == State.CONNECTED) {
return true;
}
}
}
return false;
}
/**
* 检查手机网络是否正常(可连接或不可连接2种状态)
*/
public boolean isNetSucces() {
ConnectivityManager cwjManager = (ConnectivityManager) mCon.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cwjManager.getActiveNetworkInfo();
if (info != null && info.isAvailable()) {
return true;
} else {
return false;
}
}
public int getNetType() {
ConnectivityManager manager = (ConnectivityManager) mCon.getSystemService(Context.CONNECTIVITY_SERVICE);
State mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
TelephonyManager tm = (TelephonyManager) mCon.getSystemService(Context.TELEPHONY_SERVICE); // 获得手机SIMType
int subType = tm.getNetworkType();
// 如果3G、wifi、2G等网络状态是连接的,则退出,否则显示提示信息进入网络设置界面
if (wifi == State.CONNECTED || wifi == State.CONNECTING) {
return TYPE_WIFI;
}
if (mobile == State.CONNECTED || mobile == State.CONNECTING) {
return isConnectionFast(ConnectivityManager.TYPE_MOBILE, subType) ? TYPE_FAST_MOBILE : TYPE_NORMAL_MOBILE;
}
return -1;
}
public static boolean isConnectionFast(int type, int subType) {
if (type == ConnectivityManager.TYPE_WIFI) {
return true;
} else if (type == ConnectivityManager.TYPE_MOBILE) {
switch (subType) {
case TelephonyManager.NETWORK_TYPE_1xRTT:
return false; // ~ 50-100 kbps
case TelephonyManager.NETWORK_TYPE_CDMA:
return false; // ~ 14-64 kbps
case TelephonyManager.NETWORK_TYPE_EDGE:
return false; // ~ 50-100 kbps
case TelephonyManager.NETWORK_TYPE_EVDO_0:
return true; // ~ 400-1000 kbps
case TelephonyManager.NETWORK_TYPE_EVDO_A:
return true; // ~ 600-1400 kbps
case TelephonyManager.NETWORK_TYPE_GPRS:
return false; // ~ 100 kbps
// case TelephonyManager.NETWORK_TYPE_HSDPA:
// return true; // ~ 2-14 Mbps
// case TelephonyManager.NETWORK_TYPE_HSPA:
// return true; // ~ 700-1700 kbps
// case TelephonyManager.NETWORK_TYPE_HSUPA:
// return true; // ~ 1-23 Mbps
case TelephonyManager.NETWORK_TYPE_UMTS:
return true; // ~ 400-7000 kbps
// NOT AVAILABLE YET IN API LEVEL 7
// case Connectivity.NETWORK_TYPE_EHRPD:
// return true; // ~ 1-2 Mbps
// case Connectivity.NETWORK_TYPE_EVDO_B:
// return true; // ~ 5 Mbps
// case Connectivity.NETWORK_TYPE_HSPAP:
// return true; // ~ 10-20 Mbps
// case Connectivity.NETWORK_TYPE_IDEN:
// return false; // ~25 kbps
// case Connectivity.NETWORK_TYPE_LTE:
// return true; // ~ 10+ Mbps
// Unknown
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
return false;
default:
return false;
}
} else {
return true;
}
}
public String getAPN() {
try {
ConnectivityManager manager = (ConnectivityManager) mCon.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netWrokInfo = manager.getActiveNetworkInfo();
String apnString = netWrokInfo.getExtraInfo();
if (apnString != null) {
return apnString;
} else {
return "";
}
} catch (Exception e) {
return "";
}
}
}