我正在使用该代码获取我的设备正在使用的IPv4地址:
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().toUpperCase();
boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
if (useIPv4) {
if (isIPv4)
return sAddr;
} else {
if (!isIPv4) {
int delim = sAddr.indexOf('%'); // drop ip6 port suffix
return delim<0 ? sAddr : sAddr.substring(0, delim);
}
}
}
}
}
} catch (Exception ex) { } // for now eat exceptions
return "";
}
我的三星Galaxy Express连接到WiFi并且有一个启用了手机的SIM卡。
我从上面的代码中获取的IP是10.地址,表示手机正在使用手机信号,当我需要它来使用网络提供的192.地址时。
有没有办法改变上面的代码来选择192.如果可用的话?或者这是有问题的手机吗?
我曾尝试禁用移动网络,进入飞机模式等。
唯一有效的方法是移除SIM卡!!我不能指望用户只是为了获得内部地址吗?
由于
答案 0 :(得分:2)
我有兴趣知道是否有更好的方法......
但是现在,请查找“wlan0”地址。此外,下面的代码将为您过滤掉环回地址。
List<NetworkInterface> interfaces;
try {
interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface ni : interfaces)
{
if ((ni.isLoopback() == false) && ni.isUp() && (ni.getName().equals("wlan0")))
{
// enumerate ip addresses on this network interface (e.g. ni.getInetAddresses()
// return the first one that is is Ipv4
}
}
你应该将上面的代码与对android.net.ConnectivityManager的调用结合起来,以确认你是在wifi上。