Android 设备连接 WiFi 时如何获取蜂窝网络的 IP 地址

问题描述 投票:0回答:6

有没有一种方法可以让我在 Android 中同时获取 WiFi 和蜂窝网络的 IP 地址。我尝试使用很多示例,但只能获取 WiFi 网络的地址,而不能获取蜂窝网络的地址。我已启用 WiFi 和蜂窝网络并且设备正在通过 WiFi 访问互联网。

这是我用来获取IP地址的代码:

    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("Here is the Address",ipAddress);
                }
            }
        }
    } catch (SocketException ex) {

    }

当设备连接到 WiFi 时是否可以获取蜂窝网络的 IP 地址。如果是,这如何可行。

android networking ip-address
6个回答
16
投票

每当您在设备上启用 WiFi 并有效连接到 WiFi 网络时,无论您是否手动启用,您的移动数据都会“暂时禁用”。仅当您没有有效的 WiFi 连接时,才会考虑“移动数据开/关”设置。 一些自定义 ROM 可以选择在您连接到 WiFi 时保持移动连接处于活动状态(因此,如果您失去 WiFi 连接,它会更快地切换到移动设备),但仍然会使用 WiFi 连接。

结论:

您无法同时获得两个 IP 地址,因为您无法同时打开 WiFi 和移动网络(如果可以,您只能主动使用 WiFi)


10
投票

移动IP地址.....

public static String getMobileIPAddress() { 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()) { return addr.getHostAddress(); } } } } catch (Exception ex) { } // for now eat exceptions return ""; }
  
对于 Wifi IP 地址....

public String getWifiIPAddress() { WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); int ip = wifiInfo.getIpAddress(); return Formatter.formatIpAddress(ip); }
  
将此权限包含在您的清单中....

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  
像这样使用....

String wifiIp = getWifiIPAddress(); String mobileIp = getMobileIPAddress();
你得到这样的输出......

可能与

如何获取设备的IP地址

重复


3
投票


3
投票

WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); int ip = wifiInfo.getIpAddress(); String ipAddress = Formatter.formatIpAddress(ip);

不要忘记在您的 Android Manifest 文件中添加此权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />


来源:

获取Wifi IP地址

希望有帮助!祝你好运!


1
投票

我能想到的只有一个例子:当你通过 wifi 连接到没有互联网接入的网络时,那么你的手机也会通过蜂窝网络连接。


0
投票
root

设备上的 (wifi) 地址。因此,当 wifi 连接并处于活动使用状态时,rmnet 地址也处于活动状态,您可以从远程设备成功 ssh 到 Pixel 的 rmnet 地址(IPv4 或 IPv6,具体取决于 APN(接入点名称)协议),而不会影响主要 wifi 连接。当然,诀窍在于知道 rmnet 地址是什么,特别是在 IPv6 地址不断变化的情况下……手机必须以某种方式将其报告给远程设备。

© www.soinside.com 2019 - 2024. All rights reserved.