如何获得Hive网络的IP地址时,设备连接到WiFi在Android

d8tt03nd  于 2023-10-14  发布在  Android
关注(0)|答案(6)|浏览(144)

有没有一种方法,通过它,我可以同时在Android的WiFi和Hive网络的IP地址.我尝试使用许多例子,但能够得到只有WiFi网络的地址,而不是Hive网络.我已经启用了WiFi和Hive网络和设备是通过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时,是否可以获得Hive网络的IP地址。如果是,这是如何可行的。

zbwhf8kr

zbwhf8kr1#

当您在设备上启用WiFi并与WiFi网络保持活动连接时,无论您是否手动启用,您的移动的数据都将 * 暂时禁用 *。设置“移动的数据开/关”仅在您没有活动的WiFi连接时才被考虑。
一些自定义ROM有一个选项,以保持移动的连接活着,当你连接到WiFi(所以,如果你失去了你的WiFi连接,它切换到移动的更快),但仍然,WiFi连接使用。

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

eh57zj3b

eh57zj3b2#

试试这个可能会有帮助...
对于移动的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();

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

可能是How to get IP address of the device的复制品

erhoui1w

erhoui1w3#

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

ttisahbt4#

在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
希望能帮上忙!祝你好运!

o4hqfura

o4hqfura5#

当您的WiFi启用并连接时,您将无法获得Hive连接的IP。这是因为系统不使用Hive数据连接节省电池的原因。虽然您可以同时启用这两个选项,但系统一次只能使用一个。这就像:两个都是允许的,但只有一个被使用。
我能想到的只有一个例子:当你通过WiFi连接到没有互联网接入的网络时,你的手机也会通过Hive网络连接。

jtoj6r0c

jtoj6r0c6#

在最新的Pixels运行Android 13,开发者选项有一个“移动的数据始终活动”切换(“快速网络切换”),因此/system/bin/ifconfig [-S]报告在root设备上的rmnet(Hive数据)和wlan(wifi)地址。因此,当wifi连接并处于活跃使用状态时,rmnet地址也是活跃的,您可以成功地从远程设备ssh到Pixel的rmnet地址,根据APN(接入点名称)协议,可以是IPv4或IPv6,而不会影响主要的wifi连接。当然,诀窍在于知道rmnet地址是什么,特别是在IPv6地址不断变化的情况下。电话必须以某种方式将其报告给远程设备。

相关问题