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

时间:2016-11-18 05:59:55

标签: android networking ip-address

有没有办法可以同时获取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地址。如果可行则是如此。

5 个答案:

答案 0 :(得分:11)

每当您在设备上启用WiFi并且与WiFi网络建立有效连接时,无论您是否手动启用了移动数据,暂时禁用。设置&#34;移动数据开/关&#34;只有在没有有效的WiFi连接时才会考虑。

某些自定义ROM可以选择在连接到WiFi时保持移动连接处于活动状态(因此,如果您丢失了WiFi连接,它会更快地切换到移动设备),但仍然使用WiFi连接。

结论:由于无法同时启用WiFi和移动网络,因此无法获取这两个IP地址(如果可以,您只能主动使用WiFi)

答案 1 :(得分:7)

尝试这可能有帮助.....

  

移动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();

你得到这样的输出......

o

可能是How to get IP address of the device

的共同体

答案 2 :(得分:3)

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

答案 3 :(得分:3)

在java代码中使用以下内容:

    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" />

来源:Get Wifi IP Address

希望它有所帮助!祝你好运!

答案 4 :(得分:1)

启用并连接wifi后,您无法通过蜂窝连接获取IP。这是因为系统不会出于节省电池的原因而使用蜂窝数据连接。尽管您可以同时启用它们,但系统一次只能使用一个。它是这样的:两者都被允许,但只使用了一个。

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