广告载入、软件在线更新、网络编程都需要检测网络的类型。对于WIFI和3G 2G的判断一直很困惑,下午花了几个小时,完成以下测试。测试手机为MT15I+WIFI+移动2G,屌丝用不起3G,有条件的朋友可以跟贴追加3G网络测试结果。
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.telephony.TelephonyManager;
import android.util.Log;
public class NetWork {
//以下判断函数测试结果。
//1.开WIFI关闭GPRS, isWifi()Active()=true,G2G3()=10000,isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=true,is3G()=false
//2.先开GPRS 开WIFI但不能连 ,UC不能上网 isWifi()Active()=false,G2G3()=2, isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=false,is3G()=true
//3.先开GPRS再开手机无线热点 isWifi()Active()=false,G2G3()=2, isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=false,is3G()=true
//4 先关GPRS再开手机无线热点 isWifi()Active()=false,G2G3()=1000,isNetworkAvailable()=false,isWifi()Enabled()=false,isWifi()=false,is3G()=false
//5.同时打开WIFI与GPRS isWifi()Active()=false,G2G3()=1000,isNetworkAvailable()=false,isWifi()Enabled()=false,isWifi()=false,is3G()=false
//6.同时打开WIFI与GPRS,但无WIFI网络 UC可上网 isWifi()Active()=false,G2G3()=2 ,isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=false,is3G()=true
public static int G3G2(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) {
if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS || info.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA || info.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE) {
Log.i("tag", "mobile connected " + info.getSubtype());
} else {
Log.i("tag", " not mobile");
}
return info.getSubtype();
} else
Log.i("tag", "not mobile connected ");
return 10000;
// return 1联通2G 2移动2G 4电信2G 5 6 12电信3G 83 联通3G 13LTE 11 IDEN 9HSUPA 10 HSPA 15HSPAP
}
// 下面这个有人说真机可用
public static boolean isWifiActive(Context inContext) {
Context context = inContext.getApplicationContext();
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.getTypeName().equals("WIFI") && info.isConnected()) {
return true;
}
}
}
}
return false;
}
// 网络是否可用
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
// public void CheckNetworkState() {//getsystemservice 只能用于ACTIVITY,需要用的朋友自己去ACTIVITY测试
// boolean flag = false;
// ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// State mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
// State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
// // 如果3G、wifi、2G等网络状态是连接的,则退出,否则显示提示信息进入网络设置界面
// if (mobile == State.CONNECTED || mobile == State.CONNECTING)
// return;
// if (wifi == State.CONNECTED || wifi == State.CONNECTING)
// return;
// }
public static boolean isWifiEnabled (Context context) {
ConnectivityManager mgrConn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
TelephonyManager mgrTel = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return ((mgrConn.getActiveNetworkInfo() != null && mgrConn.getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED) || mgrTel.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS);
}
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;
}
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;
}
测试不容易,花了几小时,特分享出来,觉得好用请顶个贴。
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.telephony.TelephonyManager;
import android.util.Log;
public class NetWork {
//以下判断函数测试结果。
//1.开WIFI关闭GPRS, isWifi()Active()=true,G2G3()=10000,isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=true,is3G()=false
//2.先开GPRS 开WIFI但不能连 ,UC不能上网 isWifi()Active()=false,G2G3()=2, isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=false,is3G()=true
//3.先开GPRS再开手机无线热点 isWifi()Active()=false,G2G3()=2, isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=false,is3G()=true
//4 先关GPRS再开手机无线热点 isWifi()Active()=false,G2G3()=1000,isNetworkAvailable()=false,isWifi()Enabled()=false,isWifi()=false,is3G()=false
//5.同时打开WIFI与GPRS isWifi()Active()=false,G2G3()=1000,isNetworkAvailable()=false,isWifi()Enabled()=false,isWifi()=false,is3G()=false
//6.同时打开WIFI与GPRS,但无WIFI网络 UC可上网 isWifi()Active()=false,G2G3()=2 ,isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=false,is3G()=true
public static int G3G2(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) {
if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS || info.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA || info.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE) {
Log.i("tag", "mobile connected " + info.getSubtype());
} else {
Log.i("tag", " not mobile");
}
return info.getSubtype();
} else
Log.i("tag", "not mobile connected ");
return 10000;
// return 1联通2G 2移动2G 4电信2G 5 6 12电信3G 83 联通3G 13LTE 11 IDEN 9HSUPA 10 HSPA 15HSPAP
}
// 下面这个有人说真机可用
public static boolean isWifiActive(Context inContext) {
Context context = inContext.getApplicationContext();
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.getTypeName().equals("WIFI") && info.isConnected()) {
return true;
}
}
}
}
return false;
}
// 网络是否可用
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
// public void CheckNetworkState() {//getsystemservice 只能用于ACTIVITY,需要用的朋友自己去ACTIVITY测试
// boolean flag = false;
// ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// State mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
// State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
// // 如果3G、wifi、2G等网络状态是连接的,则退出,否则显示提示信息进入网络设置界面
// if (mobile == State.CONNECTED || mobile == State.CONNECTING)
// return;
// if (wifi == State.CONNECTED || wifi == State.CONNECTING)
// return;
// }
public static boolean isWifiEnabled (Context context) {
ConnectivityManager mgrConn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
TelephonyManager mgrTel = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return ((mgrConn.getActiveNetworkInfo() != null && mgrConn.getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED) || mgrTel.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS);
}
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;
}
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;
}
测试不容易,花了几小时,特分享出来,觉得好用请顶个贴。
452

被折叠的 条评论
为什么被折叠?



