Android判断用户2G/3G/4G移动数据网络_Android

在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G / 3G / 4G 网络条件下,是否允许请求一些流量比较大的数据。

通过 Android 提供的 TelephonyManager 和 ConnectivityManager 都可以获取到 NetworksInfo 对象,可以通过 getType() 获取类型,判断是 wifi 还是 mobile ,如果是 mobile ,可以通过 NetworksInfo 对象的 getSubType() 和 getSubTypeName() 可以获取到对于的网络类型和名字。

网络类型和名字定义在 TelephonyManager 类里。

/** Network type is unknown */
public static final int NETWORK_TYPE_UNKNOWN = 0;
/** Current network is GPRS */
public static final int NETWORK_TYPE_GPRS = 1;
/** Current network is EDGE */
public static final int NETWORK_TYPE_EDGE = 2;
/** Current network is UMTS */
public static final int NETWORK_TYPE_UMTS = 3;
/** Current network is CDMA: Either IS95A or IS95B*/
public static final int NETWORK_TYPE_CDMA = 4;
/** Current network is EVDO revision 0*/
public static final int NETWORK_TYPE_EVDO_0 = 5;
/** Current network is EVDO revision A*/
public static final int NETWORK_TYPE_EVDO_A = 6;
/** Current network is 1xRTT*/
public static final int NETWORK_TYPE_1xRTT = 7;
/** Current network is HSDPA */
public static final int NETWORK_TYPE_HSDPA = 8;
/** Current network is HSUPA */
public static final int NETWORK_TYPE_HSUPA = 9;
/** Current network is HSPA */
public static final int NETWORK_TYPE_HSPA = 10;
/** Current network is iDen */
public static final int NETWORK_TYPE_IDEN = 11;
/** Current network is EVDO revision B*/
public static final int NETWORK_TYPE_EVDO_B = 12;
/** Current network is LTE */
public static final int NETWORK_TYPE_LTE = 13;
/** Current network is eHRPD */
public static final int NETWORK_TYPE_EHRPD = 14;
/** Current network is HSPA+ */
public static final int NETWORK_TYPE_HSPAP = 15;

看到这个代码和注释,相信没有这方面知识的人很难看懂,都啥玩意?这注释跟没注释有啥区别?!就是让人看着更加闹心而已。所以说,注释对阅读代码的人很重 要。当然这些东西可能太专业了,写这些代码的人估计是想写也不知道该怎么了,得写多大一坨啊?!我在最后会贴上一些我整理的资料,可以供大家参考一下,不 是很详细,也不专业,就是大概有个印象。

TelephonyManager 还提供了 getNetworkTypeName(int type) 的方法,这个方法可以返回一个字符串,但是信息量不大。

那怎么判断是 2G , 3G 还是 4G 网络呢?TelephonyManager 还提供了另外一个方法,getNetworkClass(int networkType) ,但这个方法被隐藏掉了,我把代码贴一下。

public static int getNetworkClass(int networkType) {
switch (networkType) {
case NETWORK_TYPE_GPRS:
case NETWORK_TYPE_EDGE:
case NETWORK_TYPE_CDMA:
case NETWORK_TYPE_1xRTT:
case NETWORK_TYPE_IDEN:
return NETWORK_CLASS_2_G;
case NETWORK_TYPE_UMTS:
case NETWORK_TYPE_EVDO_0:
case NETWORK_TYPE_EVDO_A:
case NETWORK_TYPE_HSDPA:
case NETWORK_TYPE_HSUPA:
case NETWORK_TYPE_HSPA:
case NETWORK_TYPE_EVDO_B:
case NETWORK_TYPE_EHRPD:
case NETWORK_TYPE_HSPAP:
return NETWORK_CLASS_3_G;
case NETWORK_TYPE_LTE:
return NETWORK_CLASS_4_G;
default:
return NETWORK_CLASS_UNKNOWN;
}
}

然后下面是这几个常量的值。

/** Unknown network class. {@hide} */
public static final int NETWORK_CLASS_UNKNOWN = 0;
/** Class of broadly defined "2G" networks. {@hide} */
public static final int NETWORK_CLASS_2_G = 1;
/** Class of broadly defined "3G" networks. {@hide} */
public static final int NETWORK_CLASS_3_G = 2;
/** Class of broadly defined "4G" networks. {@hide} */
public static final int NETWORK_CLASS_4_G = 3;

不知道为啥要把这些东西给隐藏起来,不靠谱?还是其他的更好的方式?!不知道,先这样吧,现在通过上面的手段,是可以知道用户用的是什么网络,当 然也可以区分出来用户使用的是 2G , 3G 还是 4G 了。当然,你获取到这些数据后,你也可以推算出用户用的是哪家公司的网络,移动的,联通的,还是电信的,当然,只在中国。而且虚拟运营商开始真正上市后, 这个就区分不出来是京东的,还是国美,苏宁的了,但是你可以知道你的手机号用的是联通的网还是移动的网。

最后贴上我收集整理的一些资料,可以参考一下。

  • GPRS       2G(2.5) General Packet Radia Service 114kbps
  • EDGE       2G(2.75G) Enhanced Data Rate for GSM Evolution 384kbps
  • UMTS      3G WCDMA 联通3G Universal Mobile Telecommunication System 完整的3G移动通信技术标准
  • CDMA     2G 电信 Code Division Multiple Access 码分多址
  • EVDO_0   3G (EVDO 全程 CDMA2000 1xEV-DO) Evolution - Data Only (Data Optimized) 153.6kps - 2.4mbps 属于3G
  • EVDO_A  3G 1.8mbps - 3.1mbps 属于3G过渡,3.5G
  • 1xRTT      2G CDMA2000 1xRTT (RTT - 无线电传输技术) 144kbps 2G的过渡,
  • HSDPA    3.5G 高速下行分组接入 3.5G WCDMA High Speed Downlink Packet Access 14.4mbps
  • HSUPA    3.5G High Speed Uplink Packet Access 高速上行链路分组接入 1.4 - 5.8 mbps
  • HSPA      3G (分HSDPA,HSUPA) High Speed Packet Access
  • IDEN      2G Integrated Dispatch Enhanced Networks 集成数字增强型网络 (属于2G,来自维基百科)
  • EVDO_B 3G EV-DO Rev.B 14.7Mbps 下行 3.5G
  • LTE        4G Long Term Evolution FDD-LTE 和 TDD-LTE , 3G过渡,升级版 LTE Advanced 才是4G
  • EHRPD  3G CDMA2000向LTE 4G的中间产物 Evolved High Rate Packet Data HRPD的升级
  • HSPAP  3G HSPAP 比 HSDPA 快些

实例:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.util.List; 

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
import android.telephony.cdma.CdmaCellLocation;
import android.telephony.gsm.GsmCellLocation;
import android.util.Log; 

public class NetWorkUtil { 

  public static boolean isWifiAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) ConfigManager
        .getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    return (networkInfo != null && networkInfo.isConnected() && networkInfo
        .getType() == ConnectivityManager.TYPE_WIFI);
  } 

  /**
   * 获取MAC地址
   *
   * @param context
   * @return
   */
  public static String getMacAddress(Context context) {
    if (context == null) {
      return "";
    } 

    String localMac = null;
    if (isWifiAvailable()) {
      localMac = getWifiMacAddress(context);
    } 

    if (localMac != null && localMac.length() > 0) {
      localMac = localMac.replace(":", "-").toLowerCase();
      return localMac;
    } 

    localMac = getMacFromCallCmd();
    if (localMac != null) {
      localMac = localMac.replace(":", "-").toLowerCase();
    } 

    return localMac;
  } 

  private static String getWifiMacAddress(Context context) {
    String localMac = null;
    try {
      WifiManager wifi = (WifiManager) context
          .getSystemService(Context.WIFI_SERVICE);
      WifiInfo info = wifi.getConnectionInfo();
      if (wifi.isWifiEnabled()) {
        localMac = info.getMacAddress();
        if (localMac != null) {
          localMac = localMac.replace(":", "-").toLowerCase();
          return localMac;
        }
      } 

    } catch (Exception e) {
      e.printStackTrace();
    } 

    return null;
  } 

  /**
   * 通过callCmd("busybox ifconfig","HWaddr")获取mac地址
   *
   * @attention 需要设备装有busybox工具
   * @return Mac Address
   */
  private static String getMacFromCallCmd() {
    String result = "";
    result = callCmd("busybox ifconfig", "HWaddr"); 

    if (result == null || result.length() <= 0) {
      return null;
    } 

    DebugLog.v("tag", "cmd result : " + result); 

    // 对该行数据进行解析
    // 例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67
    if (result.length() > 0 && result.contains("HWaddr") == true) {
      String Mac = result.substring(result.indexOf("HWaddr") + 6,
          result.length() - 1);
      if (Mac.length() > 1) {
        result = Mac.replaceAll(" ", "");
      }
    } 

    return result;
  } 

  public static String callCmd(String cmd, String filter) {
    String result = "";
    String line = "";
    try {
      Process proc = Runtime.getRuntime().exec(cmd);
      InputStreamReader is = new InputStreamReader(proc.getInputStream());
      BufferedReader br = new BufferedReader(is); 

      // 执行命令cmd,只取结果中含有filter的这一行
      while ((line = br.readLine()) != null
          && line.contains(filter) == false) {
      } 

      result = line;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return result;
  } 

  /**
   * 网络是否可用
   *
   * @param context
   * @return
   */
  public static boolean IsNetWorkEnable(Context context) {
    try {
      ConnectivityManager connectivity = (ConnectivityManager) context
          .getSystemService(Context.CONNECTIVITY_SERVICE);
      if (connectivity == null) {
        ToastUtil.showMessage(context, "无法连接网络");
        return false;
      } 

      NetworkInfo info = connectivity.getActiveNetworkInfo();
      if (info != null && info.isConnected()) {
        // 判断当前网络是否已经连接
        if (info.getState() == NetworkInfo.State.CONNECTED) {
          return true;
        }
      } 

    } catch (Exception e) {
      e.printStackTrace();
    }
    ToastUtil.showMessage(context, "无法连接网络");
    return false;
  } 

  private static final int NETWORK_TYPE_UNAVAILABLE = -1;
  // private static final int NETWORK_TYPE_MOBILE = -100;
  private static final int NETWORK_TYPE_WIFI = -101; 

  private static final int NETWORK_CLASS_WIFI = -101;
  private static final int NETWORK_CLASS_UNAVAILABLE = -1;
  /** Unknown network class. */
  private static final int NETWORK_CLASS_UNKNOWN = 0;
  /** Class of broadly defined "2G" networks. */
  private static final int NETWORK_CLASS_2_G = 1;
  /** Class of broadly defined "3G" networks. */
  private static final int NETWORK_CLASS_3_G = 2;
  /** Class of broadly defined "4G" networks. */
  private static final int NETWORK_CLASS_4_G = 3; 

  private static DecimalFormat df = new DecimalFormat("#.##"); 

  // 适配低版本手机
  /** Network type is unknown */
  public static final int NETWORK_TYPE_UNKNOWN = 0;
  /** Current network is GPRS */
  public static final int NETWORK_TYPE_GPRS = 1;
  /** Current network is EDGE */
  public static final int NETWORK_TYPE_EDGE = 2;
  /** Current network is UMTS */
  public static final int NETWORK_TYPE_UMTS = 3;
  /** Current network is CDMA: Either IS95A or IS95B */
  public static final int NETWORK_TYPE_CDMA = 4;
  /** Current network is EVDO revision 0 */
  public static final int NETWORK_TYPE_EVDO_0 = 5;
  /** Current network is EVDO revision A */
  public static final int NETWORK_TYPE_EVDO_A = 6;
  /** Current network is 1xRTT */
  public static final int NETWORK_TYPE_1xRTT = 7;
  /** Current network is HSDPA */
  public static final int NETWORK_TYPE_HSDPA = 8;
  /** Current network is HSUPA */
  public static final int NETWORK_TYPE_HSUPA = 9;
  /** Current network is HSPA */
  public static final int NETWORK_TYPE_HSPA = 10;
  /** Current network is iDen */
  public static final int NETWORK_TYPE_IDEN = 11;
  /** Current network is EVDO revision B */
  public static final int NETWORK_TYPE_EVDO_B = 12;
  /** Current network is LTE */
  public static final int NETWORK_TYPE_LTE = 13;
  /** Current network is eHRPD */
  public static final int NETWORK_TYPE_EHRPD = 14;
  /** Current network is HSPA+ */
  public static final int NETWORK_TYPE_HSPAP = 15; 

  /**
   * 格式化大小
   *
   * @param size
   * @return
   */
  public static String formatSize(long size) {
    String unit = "B";
    float len = size;
    if (len > 900) {
      len /= 1024f;
      unit = "KB";
    }
    if (len > 900) {
      len /= 1024f;
      unit = "MB";
    }
    if (len > 900) {
      len /= 1024f;
      unit = "GB";
    }
    if (len > 900) {
      len /= 1024f;
      unit = "TB";
    }
    return df.format(len) + unit;
  } 

  public static String formatSizeBySecond(long size) {
    String unit = "B";
    float len = size;
    if (len > 900) {
      len /= 1024f;
      unit = "KB";
    }
    if (len > 900) {
      len /= 1024f;
      unit = "MB";
    }
    if (len > 900) {
      len /= 1024f;
      unit = "GB";
    }
    if (len > 900) {
      len /= 1024f;
      unit = "TB";
    }
    return df.format(len) + unit + "/s";
  } 

  public static String format(long size) {
    String unit = "B";
    float len = size;
    if (len > 1000) {
      len /= 1024f;
      unit = "KB";
      if (len > 1000) {
        len /= 1024f;
        unit = "MB";
        if (len > 1000) {
          len /= 1024f;
          unit = "GB";
        }
      }
    }
    return df.format(len) + "\n" + unit + "/s";
  } 

  /**
   * 获取运营商
   *
   * @return
   */
  public static String getProvider() {
    String provider = "未知";
    try {
      TelephonyManager telephonyManager = (TelephonyManager) ConfigManager
          .getContext().getSystemService(Context.TELEPHONY_SERVICE);
      String IMSI = telephonyManager.getSubscriberId();
      Log.v("tag", "getProvider.IMSI:" + IMSI);
      if (IMSI == null) {
        if (TelephonyManager.SIM_STATE_READY == telephonyManager
            .getSimState()) {
          String operator = telephonyManager.getSimOperator();
          Log.v("tag", "getProvider.operator:" + operator);
          if (operator != null) {
            if (operator.equals("46000")
                || operator.equals("46002")
                || operator.equals("46007")) {
              provider = "中国移动";
            } else if (operator.equals("46001")) {
              provider = "中国联通";
            } else if (operator.equals("46003")) {
              provider = "中国电信";
            }
          }
        }
      } else {
        if (IMSI.startsWith("46000") || IMSI.startsWith("46002")
            || IMSI.startsWith("46007")) {
          provider = "中国移动";
        } else if (IMSI.startsWith("46001")) {
          provider = "中国联通";
        } else if (IMSI.startsWith("46003")) {
          provider = "中国电信";
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return provider;
  } 

  /**
   * 获取网络类型
   *
   * @return
   */
  public static String getCurrentNetworkType() {
    int networkClass = getNetworkClass();
    String type = "未知";
    switch (networkClass) {
    case NETWORK_CLASS_UNAVAILABLE:
      type = "无";
      break;
    case NETWORK_CLASS_WIFI:
      type = "Wi-Fi";
      break;
    case NETWORK_CLASS_2_G:
      type = "2G";
      break;
    case NETWORK_CLASS_3_G:
      type = "3G";
      break;
    case NETWORK_CLASS_4_G:
      type = "4G";
      break;
    case NETWORK_CLASS_UNKNOWN:
      type = "未知";
      break;
    }
    return type;
  } 

  private static int getNetworkClassByType(int networkType) {
    switch (networkType) {
    case NETWORK_TYPE_UNAVAILABLE:
      return NETWORK_CLASS_UNAVAILABLE;
    case NETWORK_TYPE_WIFI:
      return NETWORK_CLASS_WIFI;
    case NETWORK_TYPE_GPRS:
    case NETWORK_TYPE_EDGE:
    case NETWORK_TYPE_CDMA:
    case NETWORK_TYPE_1xRTT:
    case NETWORK_TYPE_IDEN:
      return NETWORK_CLASS_2_G;
    case NETWORK_TYPE_UMTS:
    case NETWORK_TYPE_EVDO_0:
    case NETWORK_TYPE_EVDO_A:
    case NETWORK_TYPE_HSDPA:
    case NETWORK_TYPE_HSUPA:
    case NETWORK_TYPE_HSPA:
    case NETWORK_TYPE_EVDO_B:
    case NETWORK_TYPE_EHRPD:
    case NETWORK_TYPE_HSPAP:
      return NETWORK_CLASS_3_G;
    case NETWORK_TYPE_LTE:
      return NETWORK_CLASS_4_G;
    default:
      return NETWORK_CLASS_UNKNOWN;
    }
  } 

  private static int getNetworkClass() {
    int networkType = NETWORK_TYPE_UNKNOWN;
    try {
      final NetworkInfo network = ((ConnectivityManager) ConfigManager
          .getContext()
          .getSystemService(Context.CONNECTIVITY_SERVICE))
          .getActiveNetworkInfo();
      if (network != null && network.isAvailable()
          && network.isConnected()) {
        int type = network.getType();
        if (type == ConnectivityManager.TYPE_WIFI) {
          networkType = NETWORK_TYPE_WIFI;
        } else if (type == ConnectivityManager.TYPE_MOBILE) {
          TelephonyManager telephonyManager = (TelephonyManager) ConfigManager
              .getContext().getSystemService(
                  Context.TELEPHONY_SERVICE);
          networkType = telephonyManager.getNetworkType();
        }
      } else {
        networkType = NETWORK_TYPE_UNAVAILABLE;
      } 

    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return getNetworkClassByType(networkType); 

  } 

  public static String getWifiRssi() {
    int asu = 85;
    try {
      final NetworkInfo network = ((ConnectivityManager) ConfigManager
          .getContext()
          .getSystemService(Context.CONNECTIVITY_SERVICE))
          .getActiveNetworkInfo();
      if (network != null && network.isAvailable()
          && network.isConnected()) {
        int type = network.getType();
        if (type == ConnectivityManager.TYPE_WIFI) {
          WifiManager wifiManager = (WifiManager) ConfigManager
              .getContext()
              .getSystemService(Context.WIFI_SERVICE); 

          WifiInfo wifiInfo = wifiManager.getConnectionInfo();
          if (wifiInfo != null) {
            asu = wifiInfo.getRssi();
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return asu + "dBm";
  } 

  public static String getWifiSsid() {
    String ssid = "";
    try {
      final NetworkInfo network = ((ConnectivityManager) ConfigManager
          .getContext()
          .getSystemService(Context.CONNECTIVITY_SERVICE))
          .getActiveNetworkInfo();
      if (network != null && network.isAvailable()
          && network.isConnected()) {
        int type = network.getType();
        if (type == ConnectivityManager.TYPE_WIFI) {
          WifiManager wifiManager = (WifiManager) ConfigManager
              .getContext()
              .getSystemService(Context.WIFI_SERVICE); 

          WifiInfo wifiInfo = wifiManager.getConnectionInfo();
          if (wifiInfo != null) {
            ssid = wifiInfo.getSSID();
            if (ssid == null) {
              ssid = "";
            }
            ssid = ssid.replaceAll("\"", "");
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return ssid;
  } 

  /**
   * 检查sim卡状态
   *
   * @param ctx
   * @return
   */
  public static boolean checkSimState() {
    TelephonyManager tm = (TelephonyManager) ConfigManager.getContext()
        .getSystemService(Context.TELEPHONY_SERVICE);
    if (tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT
        || tm.getSimState() == TelephonyManager.SIM_STATE_UNKNOWN) {
      return false;
    } 

    return true;
  } 

  /**
   * 获取imei
   */
  public static String getImei() {
    TelephonyManager mTelephonyMgr = (TelephonyManager) ConfigManager
        .getContext().getSystemService(Context.TELEPHONY_SERVICE);
    String imei = mTelephonyMgr.getDeviceId();
    if (imei == null) {
      imei = "000000000000000";
    }
    return imei;
  } 

  public static String getPhoneImsi() {
    TelephonyManager mTelephonyMgr = (TelephonyManager) ConfigManager
        .getContext().getSystemService(Context.TELEPHONY_SERVICE);
    return mTelephonyMgr.getSubscriberId();
  } 

  public static CellInfo getNetInfo() {
    CellInfo info = new CellInfo();
    try {
      TelephonyManager mTelephonyManager = (TelephonyManager) ConfigManager
          .getContext().getSystemService(Context.TELEPHONY_SERVICE);
      String operator = mTelephonyManager.getNetworkOperator();
      if (operator != null) {
        /** 通过operator获取 MCC 和MNC */
        if (operator.length() > 3) {
          String mcc = operator.substring(0, 3);
          String mnc = operator.substring(3);
          info.setMcc(mcc);
          info.setMnc(mnc);
        }
      } 

      int lac = 0;
      int cellId = 0;
      int phoneType = mTelephonyManager.getPhoneType();
      if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
        GsmCellLocation location = (GsmCellLocation) mTelephonyManager
            .getCellLocation();
        /** 通过GsmCellLocation获取中国移动和联通 LAC 和cellID */
        lac = location.getLac();
        cellId = location.getCid();
      } else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
        CdmaCellLocation location = (CdmaCellLocation) mTelephonyManager
            .getCellLocation();
        lac = location.getNetworkId();
        cellId = location.getBaseStationId();
        cellId /= 16;
      }
      if (lac == 0 || cellId == 0) {
        List<NeighboringCellInfo> infos = mTelephonyManager
            .getNeighboringCellInfo();
        int lc = 0;
        int ci = 0;
        int rssi = 0;
        for (NeighboringCellInfo cell : infos) {
          // 根据邻区总数进行循环
          if (lc == 0 || ci == 0) {
            lc = cell.getLac();
            ci = cell.getCid();
            rssi = cell.getRssi();
          }
          // sb.append(" LAC : " + info.getLac());
          // // 取出当前邻区的LAC
          // sb.append(" CID : " + info.getCid());
          // // 取出当前邻区的CID
          // sb.append(" BSSS : " + (-113 + 2 * info.getRssi()) +
          // "\n"); // 获取邻区基站信号强度
        }
        rssi = -113 + 2 * rssi;
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return info;
  } 

}

希望本文所述对大家学习Android软件编程有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 3g
, 4g
, 2G
移动数据网络
android 判断2g 3g 4g、ios 判断2g 3g 4g、android 2g 3g 4g、2g 3g 4g用户统计、android 判断3g,以便于您获取更多的相关知识。

时间: 2024-09-17 13:22:01

Android判断用户2G/3G/4G移动数据网络_Android的相关文章

Android判断用户2G/3G/4G移动数据网络

在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G / 3G / 4G 网络条件下,是否允许请求一些流量比较大的数据. 通过 Android 提供的 TelephonyManager 和 ConnectivityManager 都可以获取到 NetworksInfo 对象,可以通过 getType() 获取类型,判断是 wifi 还是 mobile ,

android 代码实现 wifi切换到2G,3G,4G网络

问题描述 android 代码实现 wifi切换到2G,3G,4G网络 求android 代码实现 wifi切换到2G,3G,4G网络,不知道能不能实现,求各位大神解答下, 不甚感激 解决方案 参考Android 判断用户2G/3G/4G移动数据网络开发(一)" rel="nofollow">android之wifi开发(一)android开发(12) 使用无线网络和切换到GPRS连接

Android判断是Wifi还是4G网络代码_Android

本文实例为大家分享了Android判断是Wifi还是4G网络的具体代码,供大家参考,具体内容如下 package com.chengxinet.bobo.utils; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.telephony.TelephonyManager; /** * Created by Ad

Android判断是Wifi还是4G网络代码

本文实例为大家分享了Android判断是Wifi还是4G网络的具体代码,供大家参考,具体内容如下 package com.chengxinet.bobo.utils; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.telephony.TelephonyManager; /** * Created by Ad

杭州建成国内首个3G/4G共模网络,公交车上享受极速网速

高清的画面.流畅的网络.同步多路视频播放,享受峰值每秒80兆的超级带宽极速无线冲浪,这是记者昨天在B1公交车上亲身感受到的用4G网络上网的全新体验. "中国移动快乐4G"中国移动浙江公司4G体验启动仪式在黄龙体育中心东广场举行.中国移动浙江公司总经理钟天华宣布,在4G体验期间,不区分移动网内外客户.不限流量.无需认证,只要乘客的终端支持WIFI功能,就能在B1快速公交上免费体验移动4G所带来的畅酣淋漓的高速感受. 杭州建成 国内首个3G/4G共模网络 钟天华表示,浙江公司已完成对武林商

Android判断用户的网络类型实例讲解(2/3/4G、wifi)_Android

很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑.但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下. 一加手机一代,移动4G 网络,得到的subtype类型值为17,我查过Android 5.1的源码,它最大的值也就为16.  我拿魅族的移动4G测试的结果如下: 小米4,电信4G的测试结果如下: 魅族MX4,联通3G 还测试了其它华为移动3G/4G的情况,就我自己的手机一加返回的值有点奇怪,之后我查了一下它的参数: 当然,其它厂商:华为.小米.魅族与上面显示的

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑.但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下. 一加手机一代,移动4G 网络,得到的subtype类型值为17,我查过Android 5.1的源码,它最大的值也就为16. 我拿魅族的移动4G测试的结果如下: 小米4,电信4G的测试结果如下: 魅族MX4,联通3G 还测试了其它华为移动3G/4G的情况,就我自己的手机一加返回的值有点奇怪,之后我查了一下它的参数: 当然,其它厂商:华为.小米.魅族与上面显示的网

辨明联通网络标识 看懂手机是怎么显示2G/3G/4G的

4G资费经过一轮杀价下调之后消解了群众的抵制:所有LTE制式也已在国内全面铺开:现在更是有越来越多的手机终端支持TD-LTE或是FDD-LTE--爱活上周也给大家列举了一些具有代表性的联通4G产品,而更早的时候还讲解过如何正确打开4G,各位都顺利用上了最快的百兆网络吗?今天来和大家一起辨别一下手机的网络标识. 如果手机正处于前3G时代:"E" "E",即为EDGE的首字母.按照习惯,我们会把它称作是2.75G,作为2G到3G之间的过渡手段.EDGE出现的目的很明确,

Android判断用户是否允许了摄像头权限实例代码

如题,既然是判断用户是否允许了摄像头权限,那么,咱们就忽略是Manifest配置的问题,因为这是开发者的事. 用户在使用APP时,如果首次进入用摄像头的地方,手机会提示是否允许该应用使用摄像头.有些用户小手一抖.或者压根就不想开启摄像头,咔擦,就给你关了,那好了.下回再进入该功能,就会出现APP一片黑,或者崩溃的情况. 作为开发者,正常思路是要提示用户,摄像头权限被你关了,赶紧去手动开启,不然,就别想用该功能了!那,咱们该怎么实现这个思路呢? 一.判断摄像头权限 Android API没提供判断