ConnectivityManager有四个主要任务:
1、监听手机网络状态(包括GPRS,WIFI, UMTS等)
2、手机状态发生改变时,发送广播
3、当一个网络连接失败时进行故障切换
4、为应用程序提供可以获取可用网络的高精度和粗糙的状态
android平台手机来说:可能会存在4中状态
1.无网络(这种状态可能是因为手机停机,网络没有开启,信号不好等原因)
2.使用WIFI上网
3.CMWAP(中国移动代理)
4.CMNET上网
常用方法
ConnectivityManager mConnManager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnManager.getActiveNetworkInfo();
然后结合判断其状态来判断当前网络状况
getActiveNetworkInfo()
返回有关当前活动的默认数据网络的详细信息。 当连接时,此网络是传出连接的默认路由
。您应该始终检查isConnected()当没有默认值时,这可能返回null
isConnected和isAvailable的 区别
isAvailable()—指示是否可以进行网络连接。
网络不可用的状态
当持续或半持久状态阻止连接网络的可能性
(1)该设备不在任何此类网络的覆盖范围内。
(2)设备位于家庭网络以外的网络(即漫游)上
(3)数据漫游已被禁用
(4)启用了飞行模式
isConnected()–牵涉到网络读写数据时,请调用此方法
指示网络连接是否存在,并且可以建立连接和传递数据。在尝试执行数据事务之前,始终
调用此方法。
isConnectedOrConnecting()
指示网络连接是否存在或正在被建立中。 这对于需要的应用程序是有好处的
做任何与网络相关的数据,而不是读或写数据
isRoaming()
指示设备当前是否正在该网络上漫游。当返回true时,建议在此网络上使用数据
isMetered()
如果此网络被计量,则返回。 网络被分类为计量
当用户对该连接上的大量数据使用敏感,当因为货币成本,数据限制或电池/性能问题。
您在进行大量数据传输之前应该检查一下,并警告用户或延迟操作,直到另一个网络可用
isFailover()
指示当前尝试连接到网络由ConnectivityManager尝试故障切换到这一点网络与其他网络断
开连接,如果这是故障切换尝试则返回true
通过判断mNetworkInfo.getType()是以下哪一种类型
ConnectivityManager.TYPE_MOBILE:移动数据
ConnectivityManager.TYPE_WIFI:WIFI数据
public class NetWorkUtil {
private static final int CMNET = 1;
private static final int WIFI = 2;
private static final int CMWAP = 3;
//判断网络是否可用
public static boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null&&mNetworkInfo.isConnected()) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
//判断WiFi是否打开
public static boolean isWiFiConnected(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWiFiNetworkInfo = connectivityManager.getActiveNetworkInfo();
if (mWiFiNetworkInfo != null && mWiFiNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI
&&mWiFiNetworkInfo.isConnected()) {
return mWiFiNetworkInfo.isAvailable();
}
return false;
}
//判断移动数据是否打开
public static boolean isMobileConnected(Context context) {
if (context != null) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mMobileNetworkInfo = connectivityManager.getActiveNetworkInfo();
if (mMobileNetworkInfo != null && mMobileNetworkInfo.isConnected() &&
mMobileNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
return mMobileNetworkInfo.isAvailable();
}
}
return false;
}
//获取连接类型
public static int getConnectedType(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
return mNetworkInfo.getType();
}
}
return -1;
}
//判断网络连接是否可用
public static boolean isNetworkAvailable(Context context) {
if(context!=null) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
} else {
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
if (networkInfo != null && networkInfo.length > 0) {
for (int i = 0; i < networkInfo.length; i++) {
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
}
return false;
}
public static void isConnected(Context context) {
ConnectivityManager manger = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manger.getActiveNetworkInfo();
//判断是否有网络连接
if(info!=null&&info.isConnected()) {
ToastUtil.getInstance().showToast(context,"网络已连接");
} else {
ToastUtil.getInstance().showToast(context,"网络连接失败");
if(Build.VERSION.SDK_INT >= 11){
//3.0以上打开设置界面,也可以直接用ACTION_WIRELESS_SETTINGS打开到wifi界面
context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));
} else {
context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
}
}
}
public static int getAPNType(Context context){
int netType = -1;
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if(networkInfo==null){
return netType;
}
int nType = networkInfo.getType();
if(nType==ConnectivityManager.TYPE_MOBILE){
Log.e("ExtraInfo", "ExtraInfo is "+networkInfo.getExtraInfo());
if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){
netType = CMNET;
} else{
netType = CMWAP;
}
} else if(nType==ConnectivityManager.TYPE_WIFI){
netType = WIFI;
}
return netType;
}
}