一、獲取設備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-tw/n/282587.html