通过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 IPv6     style     * 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());}

经过测试,可以获得正确IP地址;

更多相关文章

  1. android aosp 源码版本
  2. Android Architecture Components(一)Lifecycle源码分析
  3. Android 计算器源码
  4. 最新android 应用源码下载
  5. Android之查看外部依赖jar的源码
  6. 【30篇突击 android】源码统计四
  7. android 的短息发声阅读软件源码
  8. Android 源码热门改动速查(持续更新.....)

随机推荐

  1. Android(安卓)中自定义控件和属性
  2. Android(安卓)init简介
  3. 关于android应用--内存的优化
  4. [置顶] android性能测试工具之dumpsys
  5. 11.3、Libgdx的音频之播放PCM音频
  6. android libs下的源码和文档配置
  7. 获取Android设备的唯一识别码UUID
  8. Android单元测试-Robolectric 浅析
  9. android项目之通讯录数据库
  10. Android程序设计逻辑分析之用户事件响应-