Вернуть ВСЕ доступные IP-адреса для устройства Android?
У меня есть необходимость перечислить все доступные IP-адреса для любого конкретного устройства Android.
Я нашел пример кода, но это приводит только к возвращению одного 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;
}
1 ответ
Мне кажется, твой код просто возвращает первое совпадение - это не проблема? Я бы ожидал, что вы создадите список адресов и вернете его вместо одной строки. Что-то вроде этого:
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
вызов выполняется, поэтому я оставил его, но я ожидаю, что это также необходимо будет каким-то образом скорректировать, чтобы учесть тот факт, что у вас может быть несколько сопоставляемых адресов.