安卓中获取ip地址

  • 获取当前手机的ip地址

      public static String getIPAddress(Context context) {
      NetworkInfo info = ((ConnectivityManager) context
              .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
      if (info != null && info.isConnected()) {
          if (info.getType() == ConnectivityManager.TYPE_MOBILE) {//当前使用2G/3G/4G网络
              try {
                  //Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces();
                  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 e) {
                  e.printStackTrace();
              }
    
          } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {//当前使用无线网络
              WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
              WifiInfo wifiInfo = wifiManager.getConnectionInfo();
              String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//得到IPV4地址
              return ipAddress;
          }
      } else {
          //当前无网络连接,请在设置中打开网络
      }
      return null;
      }
    
                  /**
                  * 将得到的int类型的IP转换为String类型
                  *
                  * @param ip
                  * @return
                  */
    
                  public static String intIP2StringIP(int ip) {
                      return (ip & 0xFF) + "." +
                      ((ip >> 8) & 0xFF) + "." +
                      ((ip >> 16) & 0xFF) + "." +
                      (ip >> 24 & 0xFF);
                      }
    
  • 获取设备的ip地址

    • 原理是遍历所有网络接口的所有IP地址。如果方法返回null,则设备没有可用的网络连接。方法返回的IP地址是设备正在使用的IP地址。

        public String getLocalIpAddress() {
            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()) {
                        return inetAddress.getHostAddress().toString();
                    }
                }
            }
        } catch (SocketException ex) {
        Log.e(LOG_TAG, ex.toString());
        }
        return null;
        }
原文地址:https://www.cnblogs.com/xxc0505/p/6825699.html