前言
最近整理公司的项目,思考了一下平时的工作,觉得需要积累一下,于是决定将项目中用到的知识进行整合和记录,方便日后查询和整理,也希望能够帮到更多的开发人员。(如有错误请指正,十分感谢)
内容
需求
需要获取当前手机的网络状态,包括:
- 当前网络是否可用?
- 当前网络是WiFi网络吗?
- 当前网络是移动网络吗?
- 当前WiFi是否打开?
解决
关于第一个问题,代码如下:
/**
* 判断网络是否可用
* */
public static boolean isNetworkAvailable(Context c) {
Context context = c.getApplicationContext();
// 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
} else {
// 获取NetworkInfo对象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
if (networkInfo != null && networkInfo.length > 0) {
for (NetworkInfo aNetworkInfo : networkInfo) {
// 判断当前网络状态是否为连接状态
if (aNetworkInfo.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
复制代码
上述代码中有一个小问题存在,目前尚未解决,就是当连接WiFi的时候,如果当前WiFi能够连接上,但是WiFi本身没有数据流量能够发送出去或者接收到,那么判断结果仍然为true。
第二个问题,代码如下:
/**
* 判断是否是wifi
* @param context
* @return
*/
public static boolean isWifi(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkINfo = cm.getActiveNetworkInfo();
if (networkINfo != null
&& networkINfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
return false;
}
复制代码
第三个问题,代码如下:
/**
* 判断是否是移动网络
* @param context
* @return
*/
public static boolean is3rd(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkINfo = cm.getActiveNetworkInfo();
if (networkINfo != null
&& networkINfo.getType() == ConnectivityManager.TYPE_MOBILE) {
return true;
}
return false;
}
复制代码
第四个问题,代码如下:
/**
* 判断WIFI是否打开
* @param context
* @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);
}
复制代码
以上就是在安卓系统中,我用到的对当前网络状况的判断方式,希望能够帮助到需要的人。