有没有一种方法可以让我在 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 地址。如果是,这如何可行。
每当您在设备上启用 WiFi 并有效连接到 WiFi 网络时,无论您是否手动启用,您的移动数据都会“暂时禁用”。仅当您没有有效的 WiFi 连接时,才会考虑“移动数据开/关”设置。 一些自定义 ROM 可以选择在您连接到 WiFi 时保持移动连接处于活动状态(因此,如果您失去 WiFi 连接,它会更快地切换到移动设备),但仍然会使用 WiFi 连接。
结论:您无法同时获得两个 IP 地址,因为您无法同时打开 WiFi 和移动网络(如果可以,您只能主动使用 WiFi)
移动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地址
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地址
我能想到的只有一个例子:当你通过 wifi 连接到没有互联网接入的网络时,那么你的手机也会通过蜂窝网络连接。
设备上的 (wifi) 地址。因此,当 wifi 连接并处于活动使用状态时,rmnet 地址也处于活动状态,您可以从远程设备成功 ssh 到 Pixel 的 rmnet 地址(IPv4 或 IPv6,具体取决于 APN(接入点名称)协议),而不会影响主要 wifi 连接。当然,诀窍在于知道 rmnet 地址是什么,特别是在 IPv6 地址不断变化的情况下……手机必须以某种方式将其报告给远程设备。