安卓处理网络状态——无网,2g,3g,wifi,ethernet,other

2013年08月28日 15:31    发布者:reggae
分享给大家一篇技术文章,还有很多不足之处,欢迎吐槽!期待各位android爱好者,加入android学习交流群:278744577,加群请验证:eec,共同探讨!
直接上代码:
public class GetNetWorkStateActor extends FusionActor {
@Override
public boolean processFusionMessage(FusionMessage msg) {
// TODO Auto-generated method stub
msg.setResponseData(checkNet());
return false;
}
private int checkNet() {
// TODO Auto-generated method stub
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfoActivity = connectivityManager
.getActiveNetworkInfo();
int netFlag = 0;
if (mobNetInfoActivity != null) {
switch (mobNetInfoActivity.getType()) {
case ConnectivityManager.TYPE_ETHERNET:
// ethernet
netFlag = 1;
break;
case ConnectivityManager.TYPE_WIFI:
// wifi
netFlag = 2;
break;
case ConnectivityManager.TYPE_MOBILE:
// gprs
if(isFastMobileNetwork(context)){
//2g
netFlag = 3;
}else{
//3g
netFlag = 4;
}
break;
default:
break;
}
} else {
//no network
netFlag = 0;
}
return netFlag;
}
private static boolean isFastMobileNetwork(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
switch (telephonyManager.getNetworkType()) {
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
case TelephonyManager.NETWORK_TYPE_EHRPD:
return true; // ~ 1-2 Mbps
case TelephonyManager.NETWORK_TYPE_EVDO_B:
return true; // ~ 5 Mbps
case TelephonyManager.NETWORK_TYPE_HSPAP:
return true; // ~ 10-20 Mbps
case TelephonyManager.NETWORK_TYPE_IDEN:
return false; // ~25 kbps
case TelephonyManager.NETWORK_TYPE_LTE:
return true; // ~ 10+ Mbps
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
return false;
default:
return false;
}
}
}