Android开发查看网络状态

首先需要在AndroidManifest.xml中配置权限:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />


查看网络状态的工具类NetworkUtils.java :


import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.provider.Settings;

import java.util.Locale;

import moai.log.MLog;
import moai.log.MLogManager;

/**
 * 通用网络状态的工具类
 */
public class NetworkUtils {
	
	private static final String TAG = "Networks";
	/**
	 * 是否网络连通,不管什么网络
	 * @param context
	 * @return
	 */
	public static boolean isNetworkConnected(Context context) {
		try {
			ConnectivityManager mConnectivityManager = (ConnectivityManager) context
					.getSystemService(Context.CONNECTIVITY_SERVICE);
			NetworkInfo mNetworkInfo = mConnectivityManager
					.getActiveNetworkInfo();
			if (mNetworkInfo != null) {
				return mNetworkInfo.isConnected();
			} else {
				return false;
			}
		} catch (Exception e) {
			Log.e(TAG, "isNetworkConnected fail:" + e.toString());
			// LG,有时没有connectivity_service,抛IllegalArgumentException
			return false;
		}
	}

	/**
	 * ni.getTypeNmae()可能取值如下
	 *  WIFI,表示WIFI联网
	 *  MOBILE,表示GPRS、EGPRS 3G网络
	 *  WIFI和(E)GPRS不能共存,如果两个都打开,系统仅支持WIFI
	 * @return true,使用WIFI并且
	 */
	public static boolean isWifiConnected(Context context) {
		try {
			ConnectivityManager mConnectivityManager = (ConnectivityManager) context
					.getSystemService(Context.CONNECTIVITY_SERVICE);
			NetworkInfo mWiFiNetworkInfo = mConnectivityManager
					.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
			if (mWiFiNetworkInfo != null) {
				return mWiFiNetworkInfo.isConnected();
			} else {
				return false;
			}
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 是否连通了GPRS/3G
	 * @param context
	 * @return
	 */
	public static boolean isMobileConnected(Context context) {
		try {
			ConnectivityManager mConnectivityManager = (ConnectivityManager) context
					.getSystemService(Context.CONNECTIVITY_SERVICE);
			NetworkInfo mMobileNetworkInfo = mConnectivityManager
					.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
			if (mMobileNetworkInfo != null) {
				return mMobileNetworkInfo.isConnected();
			} else {
				return false;
			}
		} catch (Exception e) {
			return false;
		}
	}
	
	/**
	 * 是否飞行模式
	 * @param context
	 * @return
	 */
	@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
	public static boolean isAirplaneModeOn(Context context) {
		try {
			int modeIdx = Settings.System.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0);
			return modeIdx == 1;
		} catch (SecurityException e) {
			return false;
		}
    }

	public static final int NETWORK_TYPE_UNKNOWN = -1;
	public static final int NETWORK_TYPE_NET_WORK_DISABLED = 0;
	public static final int NETWORK_TYPE_WAP = 1;// wap
	public static final int NETWORK_TYPE_NET = 2;// net
	public static final int NETWORK_TYPE_WIFI = 3;// wifi
	public static final int NETWORK_TYPE_CM_NET = 4;// cmnet
	
	public static String getNetworkTypeString(Context context) {
		int nettype = Networks.checkNetworkType(context);
		String result = "";
		switch (nettype) {
		case Networks.NETWORK_TYPE_NET:
			result = "3gnet";
			break;
		case Networks.NETWORK_TYPE_WAP:
			result = "wap";
			break;
		case Networks.NETWORK_TYPE_WIFI:
			result = "wifi";
			break;
		case Networks.NETWORK_TYPE_NET_WORK_DISABLED:
			result = "网络处于关闭状态";
			break;
		case Networks.NETWORK_TYPE_UNKNOWN:
			result = "未知类型";
			break;
		case Networks.NETWORK_TYPE_CM_NET:
			result = "cmnet";
		}
		return result;
	}

	public static int checkNetworkType(Context context) {
		final String CTWAP = "ctwap";
		final String CMWAP = "cmwap";
		final String WAP_3G = "3gwap";
		final String NET_3G = "3gnet";
		final String NET_CM_3G = "cmnet";
		final String UNIWAP = "uniwap";

		try {
			final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
			final NetworkInfo info = connectivityManager.getActiveNetworkInfo();
			if (info == null || !info.isAvailable()) {
				return NETWORK_TYPE_NET_WORK_DISABLED;
			} else {
				int netType = info.getType();
				int retType = NETWORK_TYPE_UNKNOWN;
				if (netType == ConnectivityManager.TYPE_WIFI) {
					retType = NETWORK_TYPE_WIFI;
				} else if (netType == ConnectivityManager.TYPE_MOBILE) {
					String netMode = info.getExtraInfo();
					if (netMode != null) {
						netMode = netMode.toLowerCase(Locale.getDefault());
						if (netMode.equals(NET_3G)) {
							retType = NETWORK_TYPE_NET;
						} else if (netMode.equals(NET_CM_3G)) {
							retType = NETWORK_TYPE_CM_NET;
						} else {
							if (netMode.equals(CTWAP) || netMode.equals(CMWAP) || netMode.equals(WAP_3G) || netMode.equals(UNIWAP)) {
								return NETWORK_TYPE_WAP;
							}
						}
					}
				}
				return retType;
			}
		} catch (Exception ex) {
			return NETWORK_TYPE_UNKNOWN;
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值