getIpAddress () возвращает 0.0.0.0. в android студии. Почему? - PullRequest
1 голос
/ 16 января 2020

Создание WifiManager

 WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);

Получение ipAddress

 String ipAddress = Formatter.formatIpAddress(wifiManager.getConnectionInfo().getIpAddress());

И отображение в textview

 textview.setText("Your Device IP Address: " + ipAddress);

Ответы [ 4 ]

1 голос
/ 16 января 2020

Вы можете использовать этот метод, чтобы получить IP-адрес устройства, передавая true для IPv4 и false для IPv6

public static String getIPAddress(boolean useIPv4) {
    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()) {
                    String sAddr = addr.getHostAddress();
                    //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                    boolean isIPv4 = sAddr.indexOf(':')<0;

                    if (useIPv4) {
                        if (isIPv4) 
                            return sAddr;
                    } else {
                        if (!isIPv4) {
                            int delim = sAddr.indexOf('%'); // drop ip6 zone suffix
                            return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase();
                        }
                    }
                }
            }
        }
    } catch (Exception ex) { } // for now eat exceptions
    return "";
}
0 голосов
/ 16 января 2020

Добавьте это разрешение в Manifest

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

Убедитесь, что Formatter библиотека должна быть такой

  import android.text.format.Formatter

Ничего плохого в вашем коде. Просто убедитесь, что эта вещь

0 голосов
/ 16 января 2020

Если вы используете симулятор или реальное устройство, вам нужно проверить, что это устройство использует Wi-Fi или сетевое соединение. Если вы не знаете, какое устройство использует сеть, вам нужно получить всю сеть и проверить IP, которая у него есть, поэтому возвращает IP

public String getIPAddress(boolean useIPv4) {
    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()) {
                    String sAddr = addr.getHostAddress();
                    //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                    boolean isIPv4 = sAddr.indexOf(':')<0;

                    if (useIPv4) {
                        if (isIPv4) 
                            return sAddr;
                    } else {
                        if (!isIPv4) {
                            int delim = sAddr.indexOf('%'); // drop ip6 zone suffix
                            return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase();
                        }
                    }
                }
            }
        }
    } catch (Exception ex) { } // for now eat exceptions
    return "";
 }

В AndroidManifest добавьте разрешение:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
0 голосов
/ 16 января 2020

Вы должны определить <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> в AndroidManifest. xml файл, он даст вам IP-адрес.

...