判斷網絡類型是wifi,仍是3G,仍是2G網絡,對不一樣android
的網絡進行不一樣的處理,現將判斷方法整理給你們,以供參考網絡
說明:下面用到的數據移動2G,聯通2G,聯通3G,wifi我都已經測試過,暫時手上oop
沒有電信的卡,因此沒有驗證,有電信手機的同事,能夠驗證一下,驗證後將結果測試
發送給你們。this
ConnectivityManager connectMgr = (ConnectivityManager) thisspa
.getSystemService(Context.CONNECTIVITY_SERVICE);code
NetworkInfo info = connectMgr.getActiveNetworkInfo();ip
1、判斷網絡是不是wifi,在判斷以前必定要進行的非空判斷,若是沒有任何網絡get
鏈接info ==nullit
info.getType() == ConnectivityManager.TYPE_WIFI
2、判斷是不是手機網絡
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 ""; }