一、獲取設備IP地址的方法
每個使用Android設備的人都需要知道自己設備的IP地址,以便讓設備連接到網絡或與另一個設備進行通信。Android提供了多種方法方便我們獲取設備IP地址,下面我們介紹一些最常用的方法:
1. 使用WifiManager獲取IP地址
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if(wifiManager != null){
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ip = String.format(Locale.getDefault(), "%d.%d.%d.%d",
(ipAddress & 0xff), (ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));
}
上面的代碼使用了WifiManager類來獲取當前連接到的Wifi的IP地址。我們可以通過調用WifiManager對象的getConnectionInfo()方法獲得WifiInfo對象,然後調用getIpAddress()方法獲取IP地址。
2. 使用NetworkInterface獲取IP地址
try {
Enumeration networkInterface = NetworkInterface.getNetworkInterfaces();
while(networkInterface.hasMoreElements()){
NetworkInterface netInterface = networkInterface.nextElement();
Enumeration addresses = netInterface.getInetAddresses();
while(addresses.hasMoreElements()){
InetAddress inetAddress = addresses.nextElement();
if(!inetAddress.isLinkLocalAddress() && !inetAddress.isLoopbackAddress()){
String ip = inetAddress.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
上面的代碼使用了NetworkInterface類來獲取設備的IP地址。首先我們調用NetworkInterface類的getNetworkInterfaces()方法獲得所有的網絡接口,然後遍歷每個網絡接口,使用InetAddress類的getInetAddresses()方法得到每個IP地址。判斷該地址既不是LinkLocalAddress,也不是LoopbackAddress,即為設備的IP地址。
二、獲取設備外網IP地址的方法
有時我們需要獲取設備的外網IP地址,即設備所連接的無線路由器的IP地址。Android提供了獲取外網IP地址的方法,方法如下:
1. 使用第三方服務獲取IP地址
我們可以使用第三方IP查詢服務獲取設備所連接無線路由器的IP地址。目前比較流行的三個服務分別是:http://ifconfig.me/ip、http://checkip.amazonaws.com/和http://icanhazip.com/。
try {
URL url = new URL("http://checkip.amazonaws.com/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String ipStr = reader.readLine().trim();
reader.close();
String ip = InetAddress.getByName(ipStr).getHostAddress();
} catch (IOException e) {
e.printStackTrace();
}
上述代碼使用HttpURLConnection來連接第三方服務,從服務中獲取IP地址的字符串表示。獲取到IP地址後,我們可以使用這個地址來建立InetAddress對象,並使用getHostAddress()方法獲得無線路由器的IP地址。其他兩個服務的調用方法類似。
2. 使用Router Advertisement獲取IP地址
在一些新的無線路由器上,我們可以使用Router Advertisement協議自行為Android的設備分配IP地址。該方法不需要任何其他服務,只需要在Router Advertisement的有效範圍內就能獲得IP地址。具體使用方法如下:
private String getIpv6Address() {
String ipv6 = null;
try {
List interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
if (interfaces.size() > 0) {
for (NetworkInterface iface : interfaces) {
if (iface.isUp() && !iface.isLoopback()) {
List addresses = iface.getInterfaceAddresses();
for (InterfaceAddress addr : addresses) {
InetAddress inetAddress = addr.getAddress();
if (inetAddress instanceof Inet6Address) {
ipv6 = inetAddress.getHostAddress();
}
}
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return ipv6;
}
上述代碼使用了NetworkInterface類來獲取設備的IP地址。 首先我們調用NetworkInterface類的getNetworkInterfaces()方法獲得所有的網絡接口,然後遍歷每個網絡接口,使用InetAddress類的getInetAddresses()方法得到每個IP地址。 判斷該IP地址是否為IPv6協議地址,是的話即為設備的IP地址。
三、總結
本文詳細介紹了Android中獲取設備IP地址和設備外網IP地址的常用方法。通過以上方法,可以輕鬆地獲取設備的IP地址和外網IP地址,方便我們應用開發和調試。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/282587.html
微信掃一掃
支付寶掃一掃