Android 網(wǎng)絡類型判斷(2g冕茅、3g、wifi)及IP地址獲取

一蛹找、 使用NetworkInfo的getType()方法可以判斷是WiFi還是手機網(wǎng)絡姨伤。手機網(wǎng)絡的情況下,使用NetworkInfo的 getSubtype()方法再去和TelephonyManager的網(wǎng)絡類型常量值去比較庸疾,判斷是何種具體網(wǎng)絡乍楚。

具體方法如下:

public static String getCurrentNetType(Context context) {
String type = "";
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info == null) {
type = "null";
} else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
type = "wifi";
} else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
int subType = info.getSubtype();
if (subType == TelephonyManager.NETWORK_TYPE_CDMA || subType == TelephonyManager.NETWORK_TYPE_GPRS
|| subType == TelephonyManager.NETWORK_TYPE_EDGE) {
type = "2g";
} else if (subType == TelephonyManager.NETWORK_TYPE_UMTS || subType == TelephonyManager.NETWORK_TYPE_HSDPA
|| subType == TelephonyManager.NETWORK_TYPE_EVDO_A || subType == TelephonyManager.NETWORK_TYPE_EVDO_0
|| subType == TelephonyManager.NETWORK_TYPE_EVDO_B) {
type = "3g";
} else if (subType == TelephonyManager.NETWORK_TYPE_LTE) {// LTE是3g到4g的過渡,是3.9G的全球標準
type = "4g";
}
}
return type;
}

相關類型列表:

1届慈、NETWORK_TYPE_1xRTT: 常量值:7 網(wǎng)絡類型:1xRTT
2徒溪、NETWORK_TYPE_CDMA : 常量值:4 網(wǎng)絡類型: CDMA (電信2g)
3、NETWORK_TYPE_EDGE: 常量值:2 網(wǎng)絡類型:EDGE(移動2g)
4拧篮、NETWORK_TYPE_EHRPD: 常量值:14 網(wǎng)絡類型:eHRPD
5词渤、NETWORK_TYPE_EVDO_0: 常量值:5 網(wǎng)絡類型:EVDO 版本0.(電信3g)
6、NETWORK_TYPE_EVDO_A: 常量值:6 網(wǎng)絡類型:EVDO 版本A (電信3g)
7串绩、NETWORK_TYPE_EVDO_B: 常量值:12 網(wǎng)絡類型:EVDO 版本B(電信3g)
8、NETWORK_TYPE_GPRS: 常量值:1 網(wǎng)絡類型:GPRS (聯(lián)通2g)
9芜壁、NETWORK_TYPE_HSDPA: 常量值:8 網(wǎng)絡類型:HSDPA(聯(lián)通3g)
10礁凡、NETWORK_TYPE_HSPA: 常量值:10 網(wǎng)絡類型:HSPA
11、NETWORK_TYPE_HSPAP: 常量值:15 網(wǎng)絡類型:HSPA+
12慧妄、NETWORK_TYPE_HSUPA: 常量值:9 網(wǎng)絡類型:HSUPA
13顷牌、NETWORK_TYPE_IDEN: 常量值:11 網(wǎng)絡類型:iDen
14、NETWORK_TYPE_LTE: 常量值:13 網(wǎng)絡類型:LTE(3g到4g的一個過渡塞淹,稱為準4g)
15窟蓝、NETWORK_TYPE_UMTS: 常量值:3 網(wǎng)絡類型:UMTS(聯(lián)通3g)
16、NETWORK_TYPE_UNKNOWN:常量值:0 網(wǎng)絡類型:未知

二.獲取手機IP地址方法

方法一:用WifiManager 方式來獲缺テ铡: 當然要加權限

public String getIp(){
//獲取wifi服務
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
//判斷wifi是否開啟
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ip = intToIp(ipAddress);
return ip;

}

private String intToIp(int i) {

return (i & 0xFF ) + "." +
((i >> 8 ) & 0xFF) + "." +
((i >> 16 ) & 0xFF) + "." +
( i >> 24 & 0xFF) ;
}

方法二:java的獲取方式 //需要添加的權限

public String getLocalIpAddress() {
   try {  
          for (Enumeration en = NetworkInterface.getNetworkInterfaces();en.hasMoreElements();) 
{NetworkInterface intf = en.nextElement();
for (Enumeration enumIpAddr = intf.getInetAddresses();enumIpAddr.hasMoreElements();) 
{InetAddress inetAddress = enumIpAddr.nextElement();
//這里需要注意:這里增加了一個限定條件( inetAddress instanceof Inet4Address),主要是在Android4.0高版本中可能優(yōu)先得到的是IPv6的地址运挫。參考:[http://blog.csdn.net/stormwy/article/details/8832164](http://blog.csdn.net/stormwy/article/details/8832164)
if (!inetAddress.isLoopbackAddress() && inetAddressinstanceof Inet4Address) 
{
 return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("here", ex.toString());
}
return null;
}

方法三:

package com.jason.demo.androidip;

import android.content.Context;
import android.net.DhcpInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.text.format.Formatter;

public class IPAddress {

public String getIPAddress(Context ctx){
WifiManager wifi_service = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcpInfo = wifi_service.getDhcpInfo();
WifiInfo wifiinfo = wifi_service.getConnectionInfo();
System.out.println("Wifi info----->"+wifiinfo.getIpAddress());
System.out.println("DHCP info gateway----->"+Formatter.formatIpAddress(dhcpInfo.gateway));
System.out.println("DHCP info netmask----->"+Formatter.formatIpAddress(dhcpInfo.netmask));
//DhcpInfo中的ipAddress是一個int型的變量状共,通過Formatter將其轉化為字符串IP地址
return Formatter.formatIpAddress(dhcpInfo.ipAddress);
}
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谁帕,隨后出現(xiàn)的幾起案子峡继,更是在濱河造成了極大的恐慌,老刑警劉巖匈挖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碾牌,死亡現(xiàn)場離奇詭異冻河,居然都是意外死亡华嘹,警方通過查閱死者的電腦和手機祟偷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門涌攻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剑鞍,“玉大人弟晚,你說我怎么就攤上這事芥炭∏绻桑” “怎么了调榄?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵踊赠,是天一觀的道長。 經(jīng)常有香客問我每庆,道長筐带,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任缤灵,我火速辦了婚禮伦籍,結果婚禮上,老公的妹妹穿的比我還像新娘腮出。我一直安慰自己帖鸦,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布胚嘲。 她就那樣靜靜地躺著作儿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馋劈。 梳的紋絲不亂的頭發(fā)上攻锰,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機與錄音妓雾,去河邊找鬼娶吞。 笑死,一個胖子當著我的面吹牛械姻,可吹牛的內(nèi)容都是我干的妒蛇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绣夺!你這毒婦竟也來了吏奸?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤乐导,失蹤者是張志新(化名)和其女友劉穎苦丁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體物臂,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡旺拉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棵磷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛾狗。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖仪媒,靈堂內(nèi)的尸體忽然破棺而出沉桌,到底是詐尸還是另有隱情,我是刑警寧澤算吩,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布留凭,位于F島的核電站,受9級特大地震影響偎巢,放射性物質發(fā)生泄漏蔼夜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一压昼、第九天 我趴在偏房一處隱蔽的房頂上張望求冷。 院中可真熱鬧,春花似錦窍霞、人聲如沸匠题。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽韭山。三九已至,卻和暖如春傲绣,著一層夾襖步出監(jiān)牢的瞬間掠哥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工秃诵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塞琼。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓菠净,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毅往,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容