開發(fā)中經(jīng)常會需要判斷當(dāng)前是否連接網(wǎng)絡(luò), WiFi 或 移動數(shù)據(jù)連接判斷的需求,
**第一種方法: **
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
通過這種方式獲取到的 IP 地址為一串?dāng)?shù)字,我們并不能看懂,因此我們需要通過下面的方法進(jìn)行轉(zhuǎn)換:
String ip = (ipAddress & 0xff) + "." + (ipAddress>>8 & 0xff) + "." + (ipAddress>>16 & 0xff) + "." + (ipAddress >> 24 & 0xff);
這樣轉(zhuǎn)換之后,我們獲取到的 IP 地址就是我們平時認(rèn)識的, 比如: 192.168.1.108
這種方法在飛行模式下獲取到的 IP 地址為 0.0.0.0
第二種方法:
public String getLocalIpAddress() {
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()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e(LOG_TAG, ex.toString());
}
return null;
}
第二種方式是比較通用的,在WiFi和3G/4G 狀態(tài)下,都可以獲取到正確的地址.比如: fe80::8e3a:e3ff:fe45:a018
這種方法在手機(jī)處于飛行狀態(tài)下時, 獲取到的 IP 地址為 null