Ist es möglich, die IP-Adresse des Geräts mit einem Code zu erhalten?
Antworten
Zu viele Anzeigen?Der folgende Code könnte Ihnen helfen.. Vergessen Sie nicht, Berechtigungen hinzuzufügen..
public String getLocalIpAddress(){
try {
for (Enumeration en = NetworkInterface.getNetworkInterfaces();
en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress();
}
}
}
} catch (Exception ex) {
Log.e("IP Address", ex.toString());
}
return null;
}
Fügen Sie die untenstehende Berechtigung in die Manifest-Datei ein.
Viel Spaß beim Codieren!!
Sie müssen keine Berechtigungen hinzufügen, wie es bei den bisher bereitgestellten Lösungen der Fall ist. Laden Sie diese Website als String herunter:
oder
Das Herunterladen einer Website als String kann mit Java-Code erfolgen:
http://www.itcuties.com/java/read-url-to-string/
Analysieren Sie das JSON-Objekt wie folgt:
https://stackoverflow.com/a/18998203/1987258
Das JSON-Attribut "query" oder "ip" enthält die IP-Adresse.
private InetAddress getLocalAddress()throws IOException {
try {
for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
//return inetAddress.getHostAddress().toString();
return inetAddress;
}
}
}
} catch (SocketException ex) {
Log.e("SALMAN", ex.toString());
}
return null;
}
Die Methode getDeviceIpAddress gibt die IP-Adresse des Geräts zurück und bevorzugt die IP-Adresse des WLAN-Interfaces, wenn es verbunden ist.
@NonNull
private String getDeviceIpAddress() {
String actualConnectedToNetwork = null;
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager != null) {
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi.isConnected()) {
actualConnectedToNetwork = getWifiIp();
}
}
if (TextUtils.isEmpty(actualConnectedToNetwork)) {
actualConnectedToNetwork = getNetworkInterfaceIpAddress();
}
if (TextUtils.isEmpty(actualConnectedToNetwork)) {
actualConnectedToNetwork = "127.0.0.1";
}
return actualConnectedToNetwork;
}
@Nullable
private String getWifiIp() {
final WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (mWifiManager != null && mWifiManager.isWifiEnabled()) {
int ip = mWifiManager.getConnectionInfo().getIpAddress();
return (ip & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "."
+ ((ip >> 24) & 0xFF);
}
return null;
}
@Nullable
public String getNetworkInterfaceIpAddress() {
try {
for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface networkInterface = en.nextElement();
for (Enumeration enumIpAddr = networkInterface.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
String host = inetAddress.getHostAddress();
if (!TextUtils.isEmpty(host)) {
return host;
}
}
}
}
} catch (Exception ex) {
Log.e("IP Address", "getLocalIpAddress", ex);
}
return null;
}
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
Verwandte: stackoverflow.com/questions/9481865/…
2 Stimmen
Nicht programmatische Version android.stackexchange.com/questions/2984/…
0 Stimmen
Du solltest es von einem externen Dienst bekommen ipof.in/txt ist ein solcher Dienst.
0 Stimmen
Ist es möglich, dies programmgesteuert in Android zu erhalten?
0 Stimmen
Siehe meine Antwort unter stackoverflow.com/questions/16730711/…