lizh 发表于 2015-9-30 11:13:58

Android网络类型判断(2g、3g、wifi)

  转自:http://blog.iyunv.com/xxxsz/article/details/8199031



判断网络类型是wifi,还是3G,还是2G网络,对不同

的网络进行不同的处理,现将判断方法整理给大家,以供参考



说明:下面用到的数据移动2G,联通2G,联通3G,wifi我都已经测试过,暂时手上

没有电信的卡,所以没有验证,有电信手机的同事,可以验证一下,验证后将结果

发送给大家。



ConnectivityManager connectMgr = (ConnectivityManager) this

      .getSystemService(Context.CONNECTIVITY_SERVICE);



NetworkInfo info = connectMgr.getActiveNetworkInfo();



一、判断网络是否是wifi,在判断之前一定要进行的非空判断,如果没有任何网络

连接info ==null

info.getType() == ConnectivityManager.TYPE_WIFI



二、判断是否是手机网络

info !=null && info.getType() ==ConnectivityManager.TYPE_MOBILE



手机网络进行详细区分:



info.getSubtype() 这里使用 getSubtype(),不是 getType(),getType()返回的

是0,或者1,是区分是手机网络还是wifi



info.getSubtype()取值列表如下:



         * NETWORK_TYPE_CDMA 网络类型为CDMA

         * NETWORK_TYPE_EDGE 网络类型为EDGE

         * NETWORK_TYPE_EVDO_0 网络类型为EVDO0

         * NETWORK_TYPE_EVDO_A 网络类型为EVDOA

         * NETWORK_TYPE_GPRS 网络类型为GPRS

         * NETWORK_TYPE_HSDPA 网络类型为HSDPA

         * NETWORK_TYPE_HSPA 网络类型为HSPA

         * NETWORK_TYPE_HSUPA 网络类型为HSUPA

         * NETWORK_TYPE_UMTS 网络类型为UMTS



联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EDGE,电信的2G为CDMA,电信

的3G为EVDO



android获取手机的ip地址




private String getPhoneIp() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
//if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet6Address) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (Exception e) {
}
return "";
}
  
页: [1]
查看完整版本: Android网络类型判断(2g、3g、wifi)