464 Stimmen

Wie man die IP-Adresse des Geräts aus dem Code herausbekommt?

Ist es möglich, die IP-Adresse des Geräts mit einem Code zu erhalten?

6 Stimmen

Vergessen Sie nicht, dass dies eine Sammlung der Größe N ist, und Sie können nicht davon ausgehen, dass N == ( 0 || 1 ). Mit anderen Worten, nehmen Sie nicht an, dass ein Gerät nur eine Möglichkeit hat, mit einem Netzwerk zu kommunizieren, und nehmen Sie nicht an, dass es überhaupt eine Möglichkeit zum Kommunizieren mit einem Netzwerk hat.

0 Stimmen

2 Stimmen

Nicht programmatische Version android.stackexchange.com/questions/2984/…

1voto

Zitat // IP-Adresse des Geräts abrufen

open fun getLocalIpAddress(): String? {
    try {
        val en: Enumeration = NetworkInterface.getNetworkInterfaces()
        while (en.hasMoreElements()) {
            val networkInterface: NetworkInterface = en.nextElement()
            val enumerationIpAddress: Enumeration = networkInterface.inetAddresses
            while (enumerationIpAddress.hasMoreElements()) {
                val inetAddress: InetAddress = enumerationIpAddress.nextElement()
                if (!inetAddress.isLoopbackAddress && inetAddress is Inet4Address) {
                    return inetAddress.getHostAddress()
                }
            }
        }
    } catch (ex: SocketException) {
        ex.printStackTrace()
    }
    return null
}

1voto

Sumit Punkte 870

Hier ist die Kotlin-Version von @Nilesh und @anargund

  fun getIpAddress(): String {
    var ip = ""
    try {
        val wm = applicationContext.getSystemService(WIFI_SERVICE) as WifiManager
        ip = Formatter.formatIpAddress(wm.connectionInfo.ipAddress)
    } catch (e: java.lang.Exception) {

    }

    if (ip.isEmpty()) {
        try {
            val en = NetworkInterface.getNetworkInterfaces()
            while (en.hasMoreElements()) {
                val networkInterface = en.nextElement()
                val enumIpAddr = networkInterface.inetAddresses
                while (enumIpAddr.hasMoreElements()) {
                    val inetAddress = enumIpAddr.nextElement()
                    if (!inetAddress.isLoopbackAddress && inetAddress is Inet4Address) {
                        val host = inetAddress.getHostAddress()
                        if (host.isNotEmpty()) {
                            ip =  host
                            break;
                        }
                    }
                }

            }
        } catch (e: java.lang.Exception) {

        }
    }

   if (ip.isEmpty())
      ip = "127.0.0.1"
    return ip
}

1voto

Moritz Punkte 9828

Das Kompilieren einiger Ideen, um die WiFi-IP von WifiManager in einer einfacheren Kotlin-Lösung zu erhalten:

private fun getWifiIp(context: Context): String? {
  return context.getSystemService().let {
     when {
      it == null -> "Kein WiFi verfügbar"
      !it.isWifiEnabled -> "WiFi ist deaktiviert"
      it.connectionInfo == null -> "WiFi nicht verbunden"
      else -> {
        val ip = it.connectionInfo.ipAddress
        ((ip and 0xFF).toString() + "." + (ip shr 8 and 0xFF) + "." + (ip shr 16 and 0xFF) + "." + (ip shr 24 and 0xFF))
      }
    }
  }
}

Alternativ können Sie die IP-Adressen von IP4-Loopback-Geräten über das NetworkInterface erhalten:

fun getNetworkIp4LoopbackIps(): Map = try {
  NetworkInterface.getNetworkInterfaces()
    .asSequence()
    .associate { it.displayName to it.ip4LoopbackIps() }
    .filterValues { it.isNotEmpty() }
} catch (ex: Exception) {
  emptyMap()
}

private fun NetworkInterface.ip4LoopbackIps() =
  inetAddresses.asSequence()
    .filter { !it.isLoopbackAddress && it is Inet4Address }
    .map { it.hostAddress }
    .filter { it.isNotEmpty() }
    .joinToString()

0voto

Vahit Keskin Punkte 170

Für die Kotlin-Sprache.

fun contextIP(context: Context): String {
    val wm: WifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
    return Formatter.formatIpAddress(wm.connectionInfo.ipAddress)
}

0voto

Makab Punkte 42

Ich mache kein Android, aber ich würde das auf eine ganz andere Weise angehen.

Sende eine Abfrage an Google, so etwas wie: https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=my%20ip

Und beziehe dich auf das HTML-Feld, in dem die Antwort gepostet wird. Du kannst auch direkt an die Quelle eine Abfrage senden.

Google wird höchstwahrscheinlich länger existieren als deine Anwendung.

Vergiss nicht, es könnte sein, dass dein Nutzer zu diesem Zeitpunkt keine Internetverbindung hat, was würdest du dann tun!

Viel Glück

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X