2013-06-03 41 views
1

我需要列出任何特定Android设备的所有可用IP地址。返回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; 
} 

回答

5

它看起来对我来说,你的代码只是返回的第一场比赛 - 是不是问题?我会希望你建立地址列表,并返回它而不是一个单一的字符串。事情是这样的:

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电话是干什么的,所以我在离开它,但我相信这也将需要以某种方式进行调整处理的事实,你可能有多个地址被匹配。

+0

我正在尝试你的解决方案,并试图将返回的值传递给一个数组没有运气。我试着:String [] ipArray = new String [] {getLocalIpAddress()};我已经在iOS上呆了一段时间,而且我有点生疏回到Android! –

+1

'String [] ipArray = getLocalIpAddress();'应该是你需要做的。 –