在这里,我面临一个关于获取Android Tablet IP地址的问题。
我正在以一种通用的方式为tablet附加程序使用以下代码。
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();
}
}
}inetAddress.getHostAddress()方法以fe80::9a4b:4aff:fe00:a6e1的形式返回IP地址,这是一种不同的格式,而不是122.xx.xxx.xxx格式。
当我使用Wifimanager类获取tablet地址时,它只返回这种格式的122.xx.xxx.xxx。
但使用通用的方式,我不知道它为什么给出错误的格式。
有谁能帮我解决这个问题吗..。
提前谢谢。
发布于 2011-11-08 09:21:38
fe80::9a4b:4aff:fe00:a6e1一点也不错。这只是一种新风格,IPv6.
新的应用程序应该总是设计成能够在这两种格式下工作。
发布于 2011-11-08 09:23:13
这是一个IPv6地址。首先来看一下维基百科文章。可以将IPv6地址转换为IPv4地址(即xxx.xxx),但这不能保证。
发布于 2011-11-08 10:03:23
/*查看可用的网络接口,并选择第一个“体面”的IPv4地址。*由于模拟器默认使用10.0.2.15,只有在没有更好的可用时才使用它。*/
public String getMyIp() {
Set<String> eligible = eligibleIpAddresses();
/* For the emulator, prefer an IP address other than 10.0.2.15 (default emulator address)
* but use it if it is the only one. */
if (eligible.size() > 1) {
eligible.remove("10.0.2.15");
return eligible.iterator().next();
} else if (eligible.size() == 1) {
return eligible.iterator().next();
} else {
Log.w("Using local IP address, no external objects will be discovered","---");
return "127.0.0.1";
}
}
public static Set<String> eligibleIpAddresses() {
Set<String> eligible = new HashSet<String>();
try {
Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
while (netInterfaces.hasMoreElements()) {
NetworkInterface ni = netInterfaces.nextElement();
Enumeration<InetAddress> address = ni.getInetAddresses();
while (address.hasMoreElements()) {
InetAddress addr = address.nextElement();
if (!addr.isLoopbackAddress() && !(addr.getHostAddress().indexOf(":") > -1)) {
eligible.add(addr.getHostAddress());
}
}
}
} catch (Exception e) {
}
return eligible;
}https://stackoverflow.com/questions/8048176
复制相似问题