android - 返回 Android 设备的所有可用 IP 地址?

标签 android arrays return ip-address

我需要列出任何特定 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/

相关文章:

php - wget 返回下载的文件名

swift - 如何在 Swift 中抑制返回类型为 Void 的闭包的隐式返回

安卓 : Change SQLite DB on upgrade

java - 是否有检测网络使用情况的 Intent,无论是 3G 还是 Wifi?

android - 为什么 JavaScript 运行时包含在 Gradle for Android 中?

javascript - 查找多维数组中的相邻差异

javascript - 列出开放有限有向图中给定节点的所有可能路径

javascript - 从 javascript 函数返回数据的更好方法是什么

java - 谷歌地图未在自定义 Flipview 中初始化

java - 无法让数组更改为正确的大小