您的位置:首页 > 理论基础 > 计算机网络

Android系统信息获取 之六:网络连接状态信息获取

2013-08-07 13:35 591 查看
Android系统信息获取 之六:网络连接状态信息获取

Android系统可以通过WIFI和移动网络来连接互联网,系统网络连接状态是通过ConnectivityManager 类来获取的。关键代码如下:

ConnectivityManager connManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);


对于网络状态的判断,Android提供了大量的API,我们只要善于利用这些API就能很很容易获取各种网络的状态信息。总结的各种网络状态接口如下:

// API都有只不过是将其进行综合并作为自己工程中的工具函数使用,很方便的。
/**
* 获取当前网络状态的类型 *
*
* @param mContext
* @return 返回网络类型
*/
public static final int NETWORK_TYPE_NONE = -0x1; // 断网情况
public static final int NETWORK_TYPE_WIFI = 0x1; // WIFI模式
public static final int NETWOKR_TYPE_MOBILE = 0x2; // GPRS模式

public static int getCurrentNetType(Context mContext) {
ConnectivityManager connManager = (ConnectivityManager) mContext
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI); // WIFI
NetworkInfo gprs = connManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); // GPRS

if (wifi != null && wifi.getState() == State.CONNECTED) {
Log.d(TAG, "Current net type:  WIFI.");
return NETWORK_TYPE_WIFI;
} else if (gprs != null && gprs.getState() == State.CONNECTED) {
Log.d(TAG, "Current net type:  GPRS.");
return NETWOKR_TYPE_MOBILE;
}
Log.e(TAG, "Current net type:  NONE.");
return NETWORK_TYPE_NONE;
}

/**
* 判断Android客户端网络是否连接
* 只能判断是否有可用的连接,而不能判断是否能连网
* @param context
* @return true/false
*/
public static boolean checkNet(Context context) {
try {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
} catch (Exception e) {
return false;
}
return false;
}

/**
* 检验网络连接 并toast提示
* @return
*/
public boolean noteIntentConnect(Context context) {
ConnectivityManager con = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkinfo = con.getActiveNetworkInfo();
if (networkinfo == null || !networkinfo.isAvailable()) {
// 当前网络不可用
Toast.makeText(context.getApplicationContext(), "请先连接Internet!",
Toast.LENGTH_SHORT).show();
return false;
}
boolean wifi = con.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isConnectedOrConnecting();
if (!wifi) { // 提示使用WIFI
Toast.makeText(context.getApplicationContext(), "建议您使用WIFI以减少流量!",
Toast.LENGTH_SHORT).show();
}
return true;

}

/**
* 判断网络连接是否可用
*
* @param context
* @return
*/
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm == null) {
} else {
// 如果仅仅是用来判断网络连接
// 则可以使用 cm.getActiveNetworkInfo().isAvailable();
NetworkInfo[] info = cm.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}

/**
* 判断网络状态是否可用
* @return true: 网络可用 ; false: 网络不可用
*/
public boolean isConnectInternet(Context mContext) {
ConnectivityManager conManager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = conManager.getActiveNetworkInfo();
if (networkInfo != null) { // 注意,这个判断一定要的,要不然会出错
return networkInfo.isAvailable();
}
return false;
}

/**
* 判断GPS是否打开
*
* @param context
* @return
*/
public static boolean isGpsEnabled(Context context) {
LocationManager lm = ((LocationManager) context
.getSystemService(Context.LOCATION_SERVICE));
List<String> accessibleProviders = lm.getProviders(true);
return accessibleProviders != null && accessibleProviders.size() > 0;
}

/**
* 判断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);
}

/**
* 判断是否是3G网络
*
* @param context
* @return
*/
public static boolean is3gNet(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 isWifiNet(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐