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

 更新时间:2015年12月23日 16:29:29   投稿:lijiao  
这篇文章主要介绍了Android判断用户2G/3G/4G移动数据网络的方法,感兴趣的小伙伴们可以参考一下

在做 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顶栏定时推送消息

    Android顶栏定时推送消息

    在用安卓设备时,经常会应用到弹出推送消息。接下来通过本文给大家介绍Android顶栏定时推送消息,感兴趣的朋友一起学习吧
    2016-04-04
  • Android多功能时钟开发案例(实战篇)

    Android多功能时钟开发案例(实战篇)

    这篇文章主要为大家详细介绍了Android多功能时钟开发案例,开发了时钟、闹钟、计时器和秒表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android实现文件的保存与读取功能示例

    Android实现文件的保存与读取功能示例

    这篇文章主要介绍了Android实现文件的保存与读取功能,涉及Android中文件操作函数getFileDir()和getCacheDir()的相关使用技巧,需要的朋友可以参考下
    2016-08-08
  • Android 手动获取判断处理权限

    Android 手动获取判断处理权限

    本篇文章主要介绍了Android手动获取判断处理权限的方法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • Android 全局通知弹窗示例分析详解

    Android 全局通知弹窗示例分析详解

    这篇文章主要为大家介绍了Android 全局通知弹窗实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Android 中TabLayout自定义选择背景滑块的实例代码

    Android 中TabLayout自定义选择背景滑块的实例代码

    TabLayout是Android 的Material Design包中的一个控件,可以和V4包中的ViewPager搭配产生一个联动的效果。接下来通过本文给大家分享TabLayout自定义选择背景滑块的实例代码,感兴趣的朋友一起学习吧
    2016-10-10
  • Android 使用viewpager实现无限循环(定时+手动)

    Android 使用viewpager实现无限循环(定时+手动)

    这篇文章主要介绍了Android 使用viewpager实现无限循环(定时+手动)的相关资料,需要的朋友可以参考下
    2015-11-11
  • Android实现微信登录的示例代码

    Android实现微信登录的示例代码

    微信登录的实现与qq登录类似。本文主要介绍了Android实现微信登录,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • android当前apn的状态以及获取方法

    android当前apn的状态以及获取方法

    在绝大多数android机器etc路径下存放一个的apns-conf.xml文件,表示当前机器使用的apn信息通过root机器可以push出来看看,具体路径可以上网搜下,接下来介绍获取apn的状态的方法
    2013-01-01
  • 详解Android全局异常的捕获处理

    详解Android全局异常的捕获处理

    这篇文章主要为大家介绍了Android全局异常的捕获处理,为什么要进行捕获处理,如何进行捕获处理,想要了解的朋友可以参考一下
    2016-01-01

最新评论