Android判断网络类型的方法(2g,3g还是wifi)

时间:2022-04-04 21:23:46

本文实例讲述了android判断网络类型的方法。分享给大家供大家参考,具体如下:

判断网络类型是wifi,还是3g,还是2g网络,对不同的网络进行不同的处理,现将判断方法整理给大家,以供参考

说明:下面用到的数据移动2g,联通2g,联通3g,wifi我都已经测试过,暂时手上没有电信的卡,所以没有验证,有电信手机的同事,可以验证一下,验证后将结果发送给大家。

?
1
2
3
connectivitymanager connectmgr = (connectivitymanager) this
    .getsystemservice(context.connectivity_service);
networkinfo info = connectmgr.getactivenetworkinfo();

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

?
1
2
info ==null
info.gettype() == connectivitymanager.type_wifi

二、判断是否是手机网络

?
1
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地址

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 "";
}

希望本文所述对大家android程序设计有所帮助。