是否可以使用一些代码获得设备的IP地址?


当前回答

我不使用Android,但我会用完全不同的方式来解决这个问题。

发送一个查询到谷歌,像这样: https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=my%20ip

并引用发布响应的HTML字段。您也可以直接查询到源。

谷歌最可能比你的应用程序存在的时间长。

只要记住,这可能是你的用户在这个时候没有互联网,你希望发生什么!

祝你好运

其他回答

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ipAddress = BigInteger.valueOf(wm.getDhcpInfo().netmask).toString();

老实说,我对代码安全只是有点熟悉,所以这可能有点像黑客。但对我来说,这是最通用的方法:

package com.my_objects.ip;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class MyIpByHost 
{
  public static void main(String a[])
  {
   try 
    {
      InetAddress host = InetAddress.getByName("nameOfDevice or webAddress");
      System.out.println(host.getHostAddress());
    } 
   catch (UnknownHostException e) 
    {
      e.printStackTrace();
    }
} }

在AndroidManifest.xml中声明ACCESS_WIFI_STATE权限:

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

可以通过WifiManager获取IP地址:

Context context = requireContext().getApplicationContext();
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

Kotlin极简版

fun getIpv4HostAddress(): String {
    NetworkInterface.getNetworkInterfaces()?.toList()?.map { networkInterface ->
        networkInterface.inetAddresses?.toList()?.find {
            !it.isLoopbackAddress && it is Inet4Address
        }?.let { return it.hostAddress }
    }
    return ""
}

我不使用Android,但我会用完全不同的方式来解决这个问题。

发送一个查询到谷歌,像这样: https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=my%20ip

并引用发布响应的HTML字段。您也可以直接查询到源。

谷歌最可能比你的应用程序存在的时间长。

只要记住,这可能是你的用户在这个时候没有互联网,你希望发生什么!

祝你好运