首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >接入蜂窝网络时获取Android的IP地址

接入蜂窝网络时获取Android的IP地址
EN

Stack Overflow用户
提问于 2015-05-12 13:51:25
回答 2查看 11.4K关注 0票数 1

当我通过移动数据网络连接到互联网时,有没有什么简单的方法可以获取我手机的IP地址?为了获得WiFi IP地址,我使用了以下简单的技术。

代码语言:javascript
运行
复制
 WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

有没有类似的方法来获取移动数据网络的IP地址?

我使用了以下代码,但它返回WiFi和蜂窝网络的MAC地址和IP地址,但我只对蜂窝IP地址感兴趣。

代码语言:javascript
运行
复制
String ipAddress = null;
                    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()) {
                                    ipAddress = inetAddress.getHostAddress().toString();
                                    Log.i("Sarao5",ipAddress);
                                }
                            }
                        }
                    } catch (SocketException ex) {}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-12 13:56:18

在我的应用中使用下面的代码-

代码语言:javascript
运行
复制
public static String getDeviceIPAddress(boolean useIPv4) {
    try {
        List<NetworkInterface> networkInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface networkInterface : networkInterfaces) {
            List<InetAddress> inetAddresses = Collections.list(networkInterface.getInetAddresses());
            for (InetAddress inetAddress : inetAddresses) {
                if (!inetAddress.isLoopbackAddress()) {
                    String sAddr = inetAddress.getHostAddress().toUpperCase();
                    boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                    if (useIPv4) {
                        if (isIPv4)
                            return sAddr;
                    } else {
                        if (!isIPv4) {
                            // drop ip6 port suffix
                            int delim = sAddr.indexOf('%');
                            return delim < 0 ? sAddr : sAddr.substring(0, delim);
                        }
                    }
                }
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return "";
}

这是最好也是最简单的方法。

希望我的回答是有帮助的。

票数 8
EN

Stack Overflow用户

发布于 2015-05-12 14:14:24

应该避免使用Formatter.formatIPAddress,使用以下代码获取IP地址,与您的代码稍有不同;它是一个返回wifi ip的函数,如果它已启用,则返回您需要的蜂窝ip,您可以修改它以满足需要;

代码语言:javascript
运行
复制
    public static String getLocalIpAddress() {
            WifiManager wifiMgr = (WifiManager) ApplicationController.getInstance().getSystemService(context.WIFI_SERVICE);
            if(wifiMgr.isWifiEnabled()) {
                WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
                int ip = wifiInfo.getIpAddress();
                String wifiIpAddress = String.format("%d.%d.%d.%d",
                        (ip & 0xff),
                        (ip >> 8 & 0xff),
                        (ip >> 16 & 0xff),
                        (ip >> 24 & 0xff));

                return wifiIpAddress;
            }

            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    Log.i("","111 inetAddress.getHostAddress(): "+inetAddress.getHostAddress());
//the condition after && is missing in your snippet, checking instance of inetAddress
                    if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
                        Log.i("","111 return inetAddress.getHostAddress(): "+inetAddress.getHostAddress());
                        return inetAddress.getHostAddress();
                    }

                }
            }

        return null;
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30182782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档