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;
- }