一、什麼是IP地址
IP地址是指互聯網協議地址,是一個用於區別互聯網上不同主機的地址,類似於家庭住址,主要用於指定數據在網路中的目的地址,確定數據通信的源和宿節點的標識。在網路互連時,IP地址可用於唯一標識一個網路介面,一台主機可擁有多個網路介面,每個網路介面都要分配一個IP地址。
二、為什麼要獲取設備IP地址
在Android開發中,獲取設備IP地址是很基礎的操作,可以用來做諸如網路狀態監測、服務端通信等功能。
三、獲取設備IP地址的方法
1. 通過WifiManager獲取WiFi IP地址
public static String getWifiIpAddress(Context context) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
return intToIp(ipAddress);
}
private static String intToIp(int i) {
return (i & 0xFF) + "." +
((i >> 8) & 0xFF) + "." +
((i >> 16) & 0xFF) + "." +
(i >> 24 & 0xFF);
}
以上代碼通過WifiManager的getConnectionInfo()方法獲取到WiFiInfo對象,再通過WiFiInfo對象調用getIpAddress()方法獲取到IP地址,最後將十進位的IP地址轉成點分十進位的形式即可。
2. 通過NetworkInterface獲取本地IP地址
public static String getLocalIpAddress() {
try {
for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface ni = en.nextElement();
for (Enumeration enumIpAddr = ni.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLinkLocalAddress() && !inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return null;
}
以上代碼通過NetworkInterface類獲取到本地網路介面,再通過網路介面獲取到InetAddress對象,最後判斷是否是IPv4類型並且不是本地迴環地址和鏈接本地地址,最終獲取到本機IP地址。
四、獲取IP地址的注意事項
1. 獲取IP地址需要網路訪問許可權,在AndroidManifest.xml文件中添加許可權<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/>和<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE”/>
2. 如果獲取到的IP地址是0.0.0.0,表示該設備尚未連接到Internet,或者使用的網路無法為其分配IP地址。
3. 對於使用VPN的設備,獲取到的IP地址可能是VPN伺服器的IP地址,而不是本機IP地址。
五、總結
獲取設備IP地址是Android開發中較為常見的操作,一般可以通過WiFiManager或者NetworkInterface來獲取IP地址。但需要注意的是,獲取IP地址需要網路訪問許可權,對於使用VPN的設備,獲取到的IP地址可能與實際不符。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/259703.html