本文主要是介绍android判断wifi是否打开,Android判断WiFi和移动数据网络(GPRS)是否同时打开,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
判断 WiFi 是否打开
public static boolean isWiFiEnable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
}
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
return !((info == null) || (!info.isAvailable())) && info.getType() == ConnectivityManager.TYPE_WIFI;
}
判断 GPRS 是否打开
public static boolean isMobileEnable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
}
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
return !((info == null) || (!info.isAvailable())) && info.getType() == ConnectivityManager.TYPE_MOBILE;
}
判断 WiFi 与 GPRS 同开(1)
尝试:使用 isWifiEnable() 和 isMobileEnable() 联合判断。
public static boolean isAllEnable(Context context) {
return isWiFiEnable(context) && isMobileEnable(context);
}
结果:此方式无法判断 WiFi 与 GPRS 同开。
在 WiFi 和 GPRS 同时打开时系统默认使用 WiFi 网络,即networkInfo.getType() 的返回值是 TYPE_WIFI,所以isMobileEnable()的结果一定是false导致判断失败。
既然在 WiFi 和 GPRS 同时打开时可以准确判断 WiFi 的状态,那么先使用isWifiEnable()判断 WiFi 是否打开,再想办法替代isMobileEnable()判断 GPRS 是否打开即可。
public static boolean isAllEnable(Context context) {
if (isWiFiEnable(context)) {
// TODO 判断移动数据网络是否打开
} else {
return false;
}
}
判断 WiFi 与 GPRS 同开(2)
观察ConnectivityManager源码发现有这么一个函数:
ConnectivityManager #getMobileDataEnabled().png
尝试使用反射调用该函数判断 WiFi 开启时 GPRS 的状态发现是可行的。
public static boolean isMobileEnableReflex(Context context) {
try {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
Method getMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod("getMobileDataEnabled");
getMobileDataEnabledMethod.setAccessible(true);
return (Boolean) getMobileDataEnabledMethod.invoke(connectivityManager);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
最终,可行的判断 WiFi 和 GPRS 同开的方式如下:
public static boolean isAllEnable(Context context) {
return isWiFiEnable(context) && isMobileEnableReflex(context);
}
这篇关于android判断wifi是否打开,Android判断WiFi和移动数据网络(GPRS)是否同时打开的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!