問:現在我面臨着使用編程獲取android設備IP地址的問題。任何人都可以給出一個解決這個問題的代碼。我已經閱讀了很多關於它的線索,但沒有從中得到可靠的答案。請給我任何建議它的讚賞。 在此先感謝。如何在android中獲取主機IP地址?
3
A
回答
5
的問題是,你可以不知道,如果你當前使用的網絡設備是真的有一個公共IP。但是,您可以檢查是否屬於這種情況,但您需要聯繫外部服務器。
在這種情況下,我們可以使用www.whatismyip.com檢查(almost copied from another SO question):
public static InetAddress getExternalIp() throws IOException {
URL url = new URL("http://automation.whatismyip.com/n09230945.asp");
URLConnection connection = url.openConnection();
connection.addRequestProperty("Protocol", "Http/1.1");
connection.addRequestProperty("Connection", "keep-alive");
connection.addRequestProperty("Keep-Alive", "1000");
connection.addRequestProperty("User-Agent", "Web-Agent");
Scanner s = new Scanner(connection.getInputStream());
try {
return InetAddress.getByName(s.nextLine());
} finally {
s.close();
}
}
,以檢查該IP綁定到你的網絡接口之一:
public static boolean isIpBoundToNetworkInterface(InetAddress ip) {
try {
Enumeration<NetworkInterface> nets =
NetworkInterface.getNetworkInterfaces();
while (nets.hasMoreElements()) {
NetworkInterface intf = nets.nextElement();
Enumeration<InetAddress> ips = intf.getInetAddresses();
while (ips.hasMoreElements())
if (ip.equals(ips.nextElement()))
return true;
}
} catch (SocketException e) {
// ignore
}
return false;
}
測試代碼:
public static void main(String[] args) throws IOException {
InetAddress ip = getExternalIp();
if (!isIpBoundToNetworkInterface(ip))
throw new IOException("Could not find external ip");
System.out.println(ip);
}
2
支持WiFi:
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
或更復雜的解決方案:
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;
}
相關問題
- 1. 獲取SFML中的主機IP地址
- 2. 如何在Docker容器中獲取本地主機IP地址?
- 3. 如何在主機中執行主機時獲取主機的IP地址?
- 4. 從IP地址獲取主機名
- 5. 從IP地址獲取主機名
- 6. 獲取遠程主機IP地址QTcpServer
- 7. 如何獲取jinja模板中主機名的IP地址
- 8. 如何在rails上獲取主機服務器的IP地址
- 9. 獲取主機的MAC地址和IP地址 - C++
- 10. Qt - 從IP地址獲取主機名和MAC地址
- 11. 如何獲得Android的IP地址的主機名?
- 12. 通過IP地址獲取主機名Android
- 13. Android:需要幫助從主機名獲取IP地址
- 14. 如何從Docker容器獲取mac主機IP地址?
- 15. 如何使用Java獲取遠程主機的IP地址
- 16. 如何使用主機名獲取IP地址?
- 17. 如何從多個IP地址獲取主機名? Java
- 18. 如何從主機獲取Parallels VM使用的IP地址?
- 19. 如何根據IP地址獲取主機名?
- 20. 如何從IP地址獲取主機名?
- 21. 在Android中獲取網絡IP地址
- 22. 如何獲取IP地址?
- 23. 如何獲取IP地址?
- 24. 在PHP中獲取服務器的主機名或IP地址
- 25. 在Powershell中使用nslookup獲取IP地址的主機名
- 26. 在Powershell中使用nslookup獲取主機名的IP地址
- 27. 如何在PageMethod中獲取IP地址?
- 28. 如何在Python3.4.3中獲取ip地址
- 29. 如何在Python中獲取IP地址
- 30. 如何從遠程主機的以太網地址獲取IP地址?
取決於你的意思是主機IP; 1.網絡接口的IP地址? 2.外部公共IP地址? – dacwe
外部公共IP地址 –
我想獲得公共IP地址 –