Android网络工具类NetworkUtils详解

网络工具类NetworkUtils,供大家参考,具体内容如下

提供的方法:

打开网络设置界面 openWirelessSettings
判断网络是否可用 isAvailable
判断网络是否连接 isConnected
判断网络是否是4G is4G
判断wifi是否连接状态 isWifiConnected
获取移动网络运营商名称 getNetworkOperatorName
获取移动终端类型 getPhoneType
获取当前的网络类型(WIFI,2G,3G,4G) getNetWorkType、getNetWorkTypeName

代码:

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;

/**
 * 网络工具类
 */
public class NetworkUtils {

  public static final int NETWORK_NO = -1;  // no network
  public static final int NETWORK_WIFI = 1;  // wifi network
  public static final int NETWORK_2G = 2;  // "2G" networks
  public static final int NETWORK_3G = 3;  // "3G" networks
  public static final int NETWORK_4G = 4;  // "4G" networks
  public static final int NETWORK_UNKNOWN = 5;  // unknown network

  private static final int NETWORK_TYPE_GSM = 16;
  private static final int NETWORK_TYPE_TD_SCDMA = 17;
  private static final int NETWORK_TYPE_IWLAN = 18;

  /**
   * 打开网络设置界面
   * <p>3.0以下打开设置界面</p>
   *
   * @param context 上下文
   */
  public static void openWirelessSettings(Context context) {
    if (android.os.Build.VERSION.SDK_INT > 10) {
      context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));
    } else {
      context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
    }
  }

  /**
   * 获取活动网络信息
   *
   * @param context 上下文
   * @return NetworkInfo
   */
  private static NetworkInfo getActiveNetworkInfo(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context
        .getSystemService(Context.CONNECTIVITY_SERVICE);
    return cm.getActiveNetworkInfo();
  }

  /**
   * 判断网络是否可用
   * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>
   *
   * @param context 上下文
   * @return {@code true}: 可用<br>{@code false}: 不可用
   */
  public static boolean isAvailable(Context context) {
    NetworkInfo info = getActiveNetworkInfo(context);
    return info != null && info.isAvailable();
  }

  /**
   * 判断网络是否连接
   * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>
   *
   * @param context 上下文
   * @return {@code true}: 是<br>{@code false}: 否
   */
  public static boolean isConnected(Context context) {
    NetworkInfo info = getActiveNetworkInfo(context);
    return info != null && info.isConnected();
  }

  /**
   * 判断网络是否是4G
   * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>
   *
   * @param context 上下文
   * @return {@code true}: 是<br>{@code false}: 不是
   */
  public static boolean is4G(Context context) {
    NetworkInfo info = getActiveNetworkInfo(context);
    return info != null && info.isAvailable() && info.getSubtype() == TelephonyManager.NETWORK_TYPE_LTE;
  }

  /**
   * 判断wifi是否连接状态
   * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>
   *
   * @param context 上下文
   * @return {@code true}: 连接<br>{@code false}: 未连接
   */
  public static boolean isWifiConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context
        .getSystemService(Context.CONNECTIVITY_SERVICE);
    return cm != null && cm.getActiveNetworkInfo() != null
        && cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
  }

  /**
   * 获取移动网络运营商名称
   * <p>如中国联通、中国移动、中国电信</p>
   *
   * @param context 上下文
   * @return 移动网络运营商名称
   */
  public static String getNetworkOperatorName(Context context) {
    TelephonyManager tm = (TelephonyManager) context
        .getSystemService(Context.TELEPHONY_SERVICE);
    return tm != null ? tm.getNetworkOperatorName() : null;
  }

  /**
   * 获取移动终端类型
   *
   * @param context 上下文
   * @return 手机制式
   * <ul>
   * <li>{@link TelephonyManager#PHONE_TYPE_NONE } : 0 手机制式未知</li>
   * <li>{@link TelephonyManager#PHONE_TYPE_GSM } : 1 手机制式为GSM,移动和联通</li>
   * <li>{@link TelephonyManager#PHONE_TYPE_CDMA } : 2 手机制式为CDMA,电信</li>
   * <li>{@link TelephonyManager#PHONE_TYPE_SIP } : 3</li>
   * </ul>
   */
  public static int getPhoneType(Context context) {
    TelephonyManager tm = (TelephonyManager) context
        .getSystemService(Context.TELEPHONY_SERVICE);
    return tm != null ? tm.getPhoneType() : -1;
  }

  /**
   * 获取当前的网络类型(WIFI,2G,3G,4G)
   * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>
   *
   * @param context 上下文
   * @return 网络类型
   * <ul>
   * <li>{@link #NETWORK_WIFI  } = 1;</li>
   * <li>{@link #NETWORK_4G   } = 4;</li>
   * <li>{@link #NETWORK_3G   } = 3;</li>
   * <li>{@link #NETWORK_2G   } = 2;</li>
   * <li>{@link #NETWORK_UNKNOWN} = 5;</li>
   * <li>{@link #NETWORK_NO   } = -1;</li>
   * </ul>
   */
  public static int getNetWorkType(Context context) {
    int netType = NETWORK_NO;
    NetworkInfo info = getActiveNetworkInfo(context);
    if (info != null && info.isAvailable()) {

      if (info.getType() == ConnectivityManager.TYPE_WIFI) {
        netType = NETWORK_WIFI;
      } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
        switch (info.getSubtype()) {

          case NETWORK_TYPE_GSM:
          case TelephonyManager.NETWORK_TYPE_GPRS:
          case TelephonyManager.NETWORK_TYPE_CDMA:
          case TelephonyManager.NETWORK_TYPE_EDGE:
          case TelephonyManager.NETWORK_TYPE_1xRTT:
          case TelephonyManager.NETWORK_TYPE_IDEN:
            netType = NETWORK_2G;
            break;

          case NETWORK_TYPE_TD_SCDMA:
          case TelephonyManager.NETWORK_TYPE_EVDO_A:
          case TelephonyManager.NETWORK_TYPE_UMTS:
          case TelephonyManager.NETWORK_TYPE_EVDO_0:
          case TelephonyManager.NETWORK_TYPE_HSDPA:
          case TelephonyManager.NETWORK_TYPE_HSUPA:
          case TelephonyManager.NETWORK_TYPE_HSPA:
          case TelephonyManager.NETWORK_TYPE_EVDO_B:
          case TelephonyManager.NETWORK_TYPE_EHRPD:
          case TelephonyManager.NETWORK_TYPE_HSPAP:
            netType = NETWORK_3G;
            break;

          case NETWORK_TYPE_IWLAN:
          case TelephonyManager.NETWORK_TYPE_LTE:
            netType = NETWORK_4G;
            break;
          default:

            String subtypeName = info.getSubtypeName();
            if (subtypeName.equalsIgnoreCase("TD-SCDMA")
                || subtypeName.equalsIgnoreCase("WCDMA")
                || subtypeName.equalsIgnoreCase("CDMA2000")) {
              netType = NETWORK_3G;
            } else {
              netType = NETWORK_UNKNOWN;
            }
            break;
        }
      } else {
        netType = NETWORK_UNKNOWN;
      }
    }
    return netType;
  }

  /**
   * 获取当前的网络类型(WIFI,2G,3G,4G)
   * <p>依赖上面的方法</p>
   *
   * @param context 上下文
   * @return 网络类型名称
   * <ul>
   * <li>NETWORK_WIFI  </li>
   * <li>NETWORK_4G   </li>
   * <li>NETWORK_3G   </li>
   * <li>NETWORK_2G   </li>
   * <li>NETWORK_UNKNOWN</li>
   * <li>NETWORK_NO   </li>
   * </ul>
   */
  public static String getNetWorkTypeName(Context context) {
    switch (getNetWorkType(context)) {
      case NETWORK_WIFI:
        return "NETWORK_WIFI";
      case NETWORK_4G:
        return "NETWORK_4G";
      case NETWORK_3G:
        return "NETWORK_3G";
      case NETWORK_2G:
        return "NETWORK_2G";
      case NETWORK_NO:
        return "NETWORK_NO";
      default:
        return "NETWORK_UNKNOWN";
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • 超实用的android网络工具类
  • Android开发之超实用的系统管理工具类【SD卡,网络,uri,屏幕,网络,软键盘,文本,进程等】
  • Android自定义网络连接工具类HttpUtil
  • Android开发中4个常用的工具类【Toast、SharedPreferences、网络及屏幕操作】
  • android实用工具类分享(获取内存/检查网络/屏幕高度/手机分辨率)
  • Android检查网络状态工具类详解
(0)

相关推荐

  • Android开发之超实用的系统管理工具类【SD卡,网络,uri,屏幕,网络,软键盘,文本,进程等】

    本文实例讲述了Android开发之超实用的系统管理工具类.分享给大家供大家参考,具体如下: 这是一个系统管理工具类,管理sd卡,判断网络,uri转换,获取屏幕宽高,获取网络类型,隐藏软键盘,复制文本到粘贴板,获取状态栏高度,获取当前进程等. 上代码 import java.io.File; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.Activity

  • Android开发中4个常用的工具类【Toast、SharedPreferences、网络及屏幕操作】

    本文实例讲述了Android开发中4个常用的工具类.分享给大家供大家参考,具体如下: 1.土司工具类(Toast管理) /** * Toast统一管理类 * * @Project App_ZXing * @Package com.android.scan * @author chenlin * @version 1.0 * @Date 2013年7月6日 * @Note TODO */ public class ToastUtil { private ToastUtil() { /* canno

  • android实用工具类分享(获取内存/检查网络/屏幕高度/手机分辨率)

    复制代码 代码如下: public class CommonUtil { public static boolean hasSDCard() { String status = Environment.getExternalStorageState();  return status.equals(Environment.MEDIA_MOUNTED); } /**  * 获取最大内存  *   * @return  */ public static long getMaxMemory() { r

  • 超实用的android网络工具类

    在实际开发中,往往一些工具类对我们的帮助是非常大的,借此,我在前人各位前辈的基础上,整理了一个网络的工具类,特此献上: /** * @类名:NetUtil * @类描述:网络判断处理类 * @创建时间:2015年2月12日-上午9:34:32 * @修改人: * @修改时间: * @修改备注: * @版本: */ public class NetUtil { /* 网络状态 */ public static boolean isNet = true; public static enum net

  • Android检查网络状态工具类详解

    在Android中开发具有网络交互的应用时候,有时候我们需要检查网络状态才能确定是否去请求网络,就需要用到公共类 代码: package com.example.ldp.com.util; /** * Created by Administrator on 2017/4/7. */ import android.content.Context; import android.app.Activity; import android.app.AlertDialog; import android.

  • Android自定义网络连接工具类HttpUtil

    本文实例为大家分享了Android网络连接工具类HttpUtil的使用方法,供大家参考,具体内容如下 该工具实现了发送get和post请求,请求的结果以String字符串的形式返回,比较适合接收服务器端发送过来的JSON字符串数据 get方法适合从服务器端获取数据 post方法适合发送数据到服务器端 使用的时候直接调用get或post方法就好 get方法传递一个url请求 post方法传递一个url请求和要发送到服务器端的数据params 接收数据后返回的是一个String字符串 HttpUti

  • Android网络工具类NetworkUtils详解

    网络工具类NetworkUtils,供大家参考,具体内容如下 提供的方法: 打开网络设置界面 openWirelessSettings 判断网络是否可用 isAvailable 判断网络是否连接 isConnected 判断网络是否是4G is4G 判断wifi是否连接状态 isWifiConnected 获取移动网络运营商名称 getNetworkOperatorName 获取移动终端类型 getPhoneType 获取当前的网络类型(WIFI,2G,3G,4G) getNetWorkType

  • Android BitmapUtils工具类使用详解

    本文实例为大家分享了Android BitmapUtils工具类的具体代码,供大家参考,具体内容如下 public final class BitmapUtils { public static final String TAG = "BitmapUtil"; private static int sShotScreenWidth = 480; private static int sShotScreenHeight = 720; private static int sShotScr

  • Java多线程同步工具类CountDownLatch详解

    目录 简介 核心方法 CountDownLatch如何使用 CountDownLatch运行流程 运用场景 总结 简介 CountDownLatch是一个多线程同步工具类,在多线程环境中它允许多个线程处于等待状态,直到前面的线程执行结束.从类名上看CountDown既是数量递减的意思,我们可以把它理解为计数器. 核心方法 countDown():计数器递减方法. await():使调用此方法的线程进入等待状态,直到计数器计数为0时主线程才会被唤醒. await(long, TimeUnit):在

  • Android屏幕分辨率工具类使用详解

    Android开发中我们经常需要用到将dip.px相互换算.获取手机屏幕的宽度.高度以及状态栏高度等,如下是基于屏幕这一块整理的一个类. package com.per.loadingwebviewdome; import android.content.Context; import android.util.DisplayMetrics; import java.lang.reflect.Field; /** * @author: xiaolijuan * @description: 屏幕分

  • java Arrays工具类实例详解

    Arrays工具类属于java中常用的工具类 public static void sort(int[] a) public static void sort(int[] a,int fromIndex, int toIndex) public static void sort(long[] a) public static void sort(long[] a,int fromIndex, int toIndex) public static void sort(short[] a) publ

  • Java中JSON处理工具类使用详解

    本文实例为大家分享了JSON处理工具类的具体代码,供大家参考,具体内容如下 import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.seri

  • Android网络请求框架Retrofit详解

    介绍: Retrofit 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求.本文使用Retrofit2.0.0版本进行实例演示. 使用Retrofit可以进行GET,POST,PUT,DELETE等请求方式. 同步请求:需要在子线程中完成,会阻塞主线程. Response response = call.execute().body(); 异步请求:请

  • javaScript手机号码校验工具类PhoneUtils详解

    本文实例为大家分享了javaScript手机号码校验工具类PhoneUtils的具体代码,供大家参考,具体内容如下 //PhoneUtils命名空间 PhoneUtils = { phoneRegexs: { //中国电信号码段 CHINA_TELECOM_PATTERN: /^(?:\+86)?1(?:33|53|7[37]|8[019])\d{8}$|^(?:\+86)?1700\d{7}$/, //中国联通号码段 CHINA_UNICOM_PATTERN: /^(?:\+86)?1(?:3

  • javaScript字符串工具类StringUtils详解

    本文实例为大家分享了javaScript字符串工具类的具体代码,供大家参考,具体内容如下 StringUtils = { isEmpty: function(input) { return input == null || input == ''; }, isNotEmpty: function(input) { return !this.isEmpty(input); }, isBlank: function(input) { return input == null || /^\s*$/.t

随机推荐