2014-10-16 109 views

回答

8

我用這個,它的工作!

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); 
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); 

清單文件中的權限如下。

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
+1

非常感謝您的回答了作品...! – krishnan 2014-10-16 10:53:05

+0

這與複製的帖子的答案相同。 – 2014-10-16 11:10:31

6

您可以使用此方法來獲得真正的IPv4和假設備通的IP地址IPv6的

public static String getIPAddress(boolean useIPv4) { 
    try { 
     List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); 
     for (NetworkInterface intf : interfaces) { 
      List<InetAddress> addrs = Collections.list(intf.getInetAddresses()); 
      for (InetAddress addr : addrs) { 
       if (!addr.isLoopbackAddress()) { 
        String sAddr = addr.getHostAddress(); 
        //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); 
        boolean isIPv4 = sAddr.indexOf(':')<0; 

        if (useIPv4) { 
         if (isIPv4) 
          return sAddr; 
        } else { 
         if (!isIPv4) { 
          int delim = sAddr.indexOf('%'); // drop ip6 zone suffix 
          return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase(); 
         } 
        } 
       } 
      } 
     } 
    } catch (Exception ex) { } // for now eat exceptions 
    return ""; 
} 

由於這個ANS How to get IP address of the device?

+0

但它返回它找到的第一個地址,對於ipv4它沒有問題,因爲只有一個,但對於基於ipv6的地址有多個,所以我如何確保它返回的第一個地址是正確的ipv6地址 – 2017-09-17 09:16:19