2016-11-18 135 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

希望能幫助到你!祝你好運!

相關問題