2016-11-18 56 views
13

有没有一种方法可以同时获取Android和WiFi中的WiFi和蜂窝网络的IP地址。我尝试了很多示例,但都能够获得只有WiFi网络的地址,而不是蜂窝网络。我已经启用了WiFi和蜂窝网络,并且设备正在通过WiFi接入互联网。如何在Android设备连接到WiFi时获取蜂窝网络的IP地址

这里是我使用来获取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.If蜂窝网络的IP地址是如何是可行的。

+1

我不认为这是可能的。由于IP地址将被分配给您的IP通道,因此一次只能有一个通道处于活动状态WIFI/MobileData。 –

回答

11

无论何时您在设备上启用WiFi并与WiFi网络有活动连接,您的移动数据是暂时被禁用,无论您是否已手动启用它。如果您没有活动的WiFi连接,则只会考虑设置“移动数据开启/关闭”。

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

结论:你不能同时获得IP地址,因为你不能同时拥有WiFi和移动网络(如果可以的话,你只能使用WiFi积极)

6

尝试,这可能是有帮助.... 。

移动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 ""; 
    } 

对于无线上网的IP地址....

public String getWifiIPAddress() { 
     WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE); 
     WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); 
     int ip = wifiInfo.getIpAddress(); 
     return Formatter.formatIpAddress(ip); 
    } 

包括此权限到您的menifest ....

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

使用这样的....

String wifiIp = getWifiIPAddress(); 
String mobileIp = getMobileIPAddress(); 

所得到的输出喜欢这个......

o

Possibally的How to get IP address of the device

1

一个dublicate当您的WiFi已启用并已连接,您不会为蜂窝连接获得IP地址。这是因为系统不使用蜂窝数据连接来节省电量。尽管您可以同时启用它们,但系统一次只能使用一个。这就像:两者都是允许的,但只有一个被使用。

我只能想到一个例子:当您通过无线网络连接到无法访问Internet的网络时,您的手机也将通过蜂窝连接。

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

用在Java代码如下:

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

不要忘了在你的Android清单文件中添加此权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

来源:Get my wifi ip address Android

希望能帮助到你!祝你好运!

相关问题