通过以太网电缆连接时获取Android设备的IPv4地址

时间:2019-07-31 08:50:30

标签: java android

我正在使用将在Android TV Box上运行的Android应用程序,我的设备可以通过WifiEthernet电缆连接到网络。我需要获取设备IPv4的地址,现在可以通过Wifi连接设备时获取地址,但是通过Ethernet电缆连接时无法获取地址。< / p>

我的最低SDK版本是24,目前,当我控制应用程序将运行的设备时,我的目标Android版本是7.1和8.0。

当设备IPv4连接到Wifi时,我使用下面的代码来获取设备Ethernet的地址,但是我找不到WifiManager manager = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = manager.getConnectionInfo(); int ipInt = wifiInfo.getIpAddress(); String ip = InetAddress.getByAddress(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ipInt).array()).getHostAddress(); 电缆的类似代码

Wifi

我需要一种方法来检测我的设备是否通过EthernetIPv4连接并正确获取@Entity

2 个答案:

答案 0 :(得分:1)

public static String getIpAddress() {
    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() && inetAddress instanceof Inet4Address) {
                    return inetAddress.getHostAddress();
                }
            }
        }
    } catch (SocketException ex) {
        ex.printStackTrace();
    }
    return null;
}

编辑:  在清单中添加Internet权限以使其正常工作:

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

这在所有情况下都应该有帮助。

答案 1 :(得分:0)

您应该尝试如下所示的方法。

检查设备是否已连接到Wi-Fi。如果是,则您所做的工作正常,但如果不能,请尝试以下代码中的 else 部分。

步骤-1:

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

步骤-2:

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
String ip = null;

if (mWifi.isConnected()) {
    WifiManager manager = (WifiManager) getSystemService(WIFI_SERVICE);
    WifiInfo wifiInfo = manager.getConnectionInfo();
    int ipInt = wifiInfo.getIpAddress();
    ip = InetAddress.getByAddress(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ipInt).array()).getHostAddress();
}
else{
    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()) {
                    ip = inetAddress.getHostAddress();
                    Log.i(TAG, "***** IP="+ ip);
                }
            }
        }
    } catch (SocketException ex) {
        Log.e(TAG, ex.toString());
    }
}

return ip;