android|android WifiMange获取IP为负

通过WifiMange获得ip步骤如下:

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); String ip = String.format("%d.%d.%d.%d", (ipAddress & 0xff), (ipAddress >> 8 & 0xff), (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));

目前还不清楚什么原因,某些设备获取wifiInfo.getIpAddress()返回值是个负数值;
所以查看android源码【AbstractIpAddressPreferenceController.java】
@Override protected void updateConnectivity() { String ipAddress = getDefaultIpAddresses(mCM); if (ipAddress != null) { mIpAddress.setSummary(ipAddress); } else { mIpAddress.setSummary(R.string.status_unavailable); } }/** * Returns the default link's IP addresses, if any, taking into account IPv4 and IPv6style * addresses. * @param cm ConnectivityManager * @return the formatted and newline-separated IP addresses, or null if none. */ private static String getDefaultIpAddresses(ConnectivityManager cm) { LinkProperties prop = cm.getActiveLinkProperties(); return formatIpAddresses(prop); }private static String formatIpAddresses(LinkProperties prop) { if (prop == null) return null; Iterator iter = prop.getAllAddresses().iterator(); // If there are no entries, return null if (!iter.hasNext()) return null; // Concatenate all available addresses, newline separated StringBuilder addresses = new StringBuilder(); while (iter.hasNext()) { addresses.append(iter.next().getHostAddress()); if (iter.hasNext()) addresses.append("\n"); } return addresses.toString(); }

可以看到,系统源码是用ConnectivityManager 方法获取,从中提取后方法如下:
ConnectivityManager conMann =(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mobileNetworkInfo = conMann.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNetworkInfo = conMann.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mobileNetworkInfo.isConnected()) { System.out.println("ip ==== " + getLocalIpAddress()); }

【android|android WifiMange获取IP为负】经过测试,可以获得正确IP地址;

    推荐阅读