【问题标题】:getIpAddress() returns 0.0.0.0. in android studio .Why?getIpAddress() 返回 0.0.0.0。在android studio中。为什么?
【发布时间】:2020-05-02 22:33:24
【问题描述】:

创建WifiManager

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

获取ipAddress

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

并显示在textview

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

【问题讨论】:

  • 我们需要代码 sn-p 来回答这个为什么!?
  • 你用的是模拟器还是真机?
  • 您是否在AndroidManifest.xml 文件中添加了 Internet 权限?
  • @frankenstein 我使用模拟器和真实设备显示相同。

标签: android android-studio android-wifi


【解决方案1】:

您可以使用此方法获取设备的 IP 地址,对于 IPv4 为 true,对于 IPv6 为 false

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 "";
}

【讨论】:

    【解决方案2】:

    你必须在AndroidManifest.xml文件中定义&lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/&gt;,它会给你IP地址。

    【讨论】:

      【解决方案3】:

      如果您使用的是模拟器或真机,您需要检查此设备是否使用了 wifi 或网络连接。 如果您不知道哪个设备正在使用网络 你需要获取所有网络并检查 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" />
      

      【讨论】:

        【解决方案4】:

        在清单中添加此权限

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

        确保Formatter 库应该是这个

          import android.text.format.Formatter
        

        您的代码没有问题。只要确定这件事

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-30
          • 1970-01-01
          • 2014-04-15
          • 2012-05-05
          • 2015-01-04
          • 2017-08-05
          • 1970-01-01
          • 2014-06-16
          相关资源
          最近更新 更多