80,362
社区成员
发帖
与我相关
我的任务
分享
public String getLocalIP(boolean ipv6) {
final HashMap<String, InetAddress> addressMap = new HashMap<String, InetAddress>();
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
final NetworkInterface intf = en.nextElement();
// http://code.google.com/p/imsdroid/issues/detail?id=398#c3
try {
if (NetworkInterface_isUp != null
&& !(Boolean) NetworkInterface_isUp.invoke(intf)) {
Log.i(TAG,
"interface=" + intf.getName()
+ " is not up,getDisplayName:"
+ intf.getDisplayName());
continue;
}
} catch (Exception e) {
}
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
Log.d(NgnNetworkService.TAG + "getHostAddress:",
inetAddress.getHostAddress().toString());
if (inetAddress.isLoopbackAddress()
|| ((inetAddress instanceof Inet6Address) && ((Inet6Address) inetAddress)
.isLinkLocalAddress())) {
Log.d(NgnNetworkService.TAG,
"ip6:" + inetAddress.getHostAddress());
continue;
}
if (!inetAddress.isLoopbackAddress()
&& (inetAddress instanceof Inet4Address)
&& !inetAddress.isLinkLocalAddress()) {// android4.0以上获取IPV4
Log.d(NgnNetworkService.TAG,
"ip41:" + inetAddress.getHostAddress());
addressMap.put(intf.getName(), inetAddress);
}
if (((inetAddress instanceof Inet4Address) && !ipv6)
|| ((inetAddress instanceof Inet6Address) && ipv6)) {
Log.d(NgnNetworkService.TAG,
"ip42:" + inetAddress.getHostAddress());
addressMap.put(intf.getName(), inetAddress);
}
}
}
if (addressMap.size() > 0) {
// openvpn address
final InetAddress openvpn = addressMap
.get(OPENVPN_INTERFACE_NAME);
if (openvpn != null) {
final String openvpnAddr = openvpn.getHostAddress()
.toString();
Log.d(NgnNetworkService.TAG, "openvpn:" + openvpnAddr);
if (!NgnStringUtils.isNullOrEmpty(openvpnAddr)) {
return openvpnAddr;
}
}
final Iterator<Map.Entry<String, InetAddress>> it = addressMap
.entrySet().iterator();
Map.Entry<String, InetAddress> kvp;
while (it.hasNext()) {
kvp = it.next();
final InetAddress address = kvp.getValue();
Log.d(NgnNetworkService.TAG,
"usb0:" + address.getHostAddress());
if (kvp.getKey().equals(USB_INTERFACE_NAME)) {
continue;
}
return address.getHostAddress();
}
Log.d(NgnNetworkService.TAG, "return:"
+ addressMap.values().iterator().next()
.getHostAddress());
return addressMap.values().iterator().next().getHostAddress();
}
} catch (SocketException ex) {
Log.e(NgnNetworkService.TAG, ex.toString());
}