我需要列出任何特定 Android 设备的所有可用 IP 地址。
我找到了一些示例代码,但这只会导致返回一个 IP 地址,而该地址恰好是一个 IPv6 地址。我需要获取任何特定设备的所有可用 IP。我在此应用程序的 iOS 版本上执行相同操作,它返回 3 个 IPv6 地址,一个 192.
地址和一个 10.
地址。我正在尝试在 Android 上复制相同的内容。我将所有值传递给数组并将它们显示在列表中。
我的代码是:
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()) {
IPAddresses.setText(inetAddress.getHostAddress().toString());
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
String LOG_TAG = null;
Log.e(LOG_TAG, ex.toString());
}
return null;
}
最佳答案
在我看来,您的代码只是返回第一个匹配项 - 这不是问题所在吗?我本来希望您建立地址列表,然后返回它,而不仅仅是一个字符串。像这样:
public String[] getLocalIpAddress()
{
ArrayList<String> addresses = new ArrayList<String>();
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()) {
IPAddresses.setText(inetAddress.getHostAddress().toString());
addresses.add(inetAddress.getHostAddress().toString());
}
}
}
} catch (SocketException ex) {
String LOG_TAG = null;
Log.e(LOG_TAG, ex.toString());
}
return addresses.toArray(new String[0]);
}
我不确定 IPAddresses.setText
调用在做什么,所以我把它留在了里面,但我希望它也需要以某种方式进行调整以处理这样一个事实您可以匹配多个地址。
关于android - 返回 Android 设备的所有可用 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904754/