private int m_phoneIP = 0;
public int GetIp() {
if (0 == m_phoneIP) {
String ip = getIPAddress();
Log.i(TAG, "ip: " + ip);
m_phoneIP = ip2Integer(ip);
Log.i(TAG, "ip2Int: " + m_phoneIP);
}
return m_phoneIP;
}
/*
获取IP地址
*/
public String getIPAddress() {
NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
if ((info.getType() == ConnectivityManager.TYPE_MOBILE) || (info.getType() == ConnectivityManager.TYPE_WIFI) ){//当前使用2G/3G/4G网络
try {
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() && inetAddress instanceof Inet4Address) {
return inetAddress.getHostAddress();
}
}
}
}
catch (SocketException e) {
e.printStackTrace();
}
}
}
else { //当前无网络连接,请在设置中打开网络
return null;
}
return null;
}
/**
* IPv4地址转换为int类型数字
*
*/
public static int ip2Integer(String ipv4Addr) {
// 判断是否是ip格式的
if (!isIPv4Address(ipv4Addr))
throw new RuntimeException("Invalid ip address");
// 匹配数字
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(ipv4Addr);
int result = 0;
int counter = 0;
while (matcher.find()) {
int value = Integer.parseInt(matcher.group());
result = (value << 8 * (3 - counter++)) | result;
}
return result;
}
/**
* 判断是否为ipv4地址
*
*/
private static boolean isIPv4Address(String ipv4Addr) {
String lower = "(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])"; // 0-255的数字
String regex = lower + "(\\." + lower + "){3}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(ipv4Addr);
return matcher.matches();
}
版权声明:本文为yzx5452830原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。