/**
* 获取ip地址
* @param context
* @return
*/
public static String getIpAddress(Context context){
NetworkInfo info = ((ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
String current_ip = "";
if (info != null && info.isConnected()) {
// 3/4g网络
if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
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) {
current_ip = inetAddress.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
} else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
// wifi网络
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
current_ip = intIP2StringIP(wifiInfo.getIpAddress());
} else if (info.getType() == ConnectivityManager.TYPE_ETHERNET){
current_ip = getLocalIp();
}
}
// isLocalIp = true;
return current_ip;
}
public static String getUniqueId(Context context){
String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
String id = androidID + Build.SERIAL;
try {
return toMD5(id);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return id;
}
}
private static String toMD5(String text) throws NoSuchAlgorithmException {
//获取摘要器 MessageDigest
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
//通过摘要器对字符串的二进制字节数组进行hash计算
byte[] digest = messageDigest.digest(text.getBytes());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < digest.length; i++) {
//循环每个字符 将计算结果转化为正整数;
int digestInt = digest[i] & 0xff;
//将10进制转化为较短的16进制
String hexString = Integer.toHexString(digestInt);
//转化结果如果是个位数会省略0,因此判断并补0
if (hexString.length() < 2) {
sb.append(0);
}
//将循环结果添加到缓冲区
sb.append(hexString);
}
//返回整个结果
String s = sb.toString();
if(s.length() >= 10){
s = s.substring(0,10);
}
return s;
}
private static String intIP2StringIP(int ip) {
return (ip & 0xFF) + "." +
((ip >> 8) & 0xFF) + "." +
((ip >> 16) & 0xFF) + "." +
(ip >> 24 & 0xFF);
}
public static String getReplyQueueNameByMAC(Context context, int maxSize) {
String queueName = "";
String macAddress = "";
char c;
int hexNumber = 0;
macAddress = getMacAddr();
String[] afterSplit = macAddress.split(":");
for (int i = 0; i < afterSplit.length; i++) {
if (ServiceBean.isIntegerRE(afterSplit[i])) {
hexNumber = Integer.parseInt(afterSplit[i]);
if ((hexNumber > 47 && hexNumber < 58)
|| (hexNumber > 64 && hexNumber < 91)
|| (hexNumber > 96 && hexNumber < 123)) {
c = (char) (Integer.parseInt(afterSplit[i]));
queueName += c;
} else {
queueName += String.valueOf(hexNumber);
}
} else {
queueName += afterSplit[i];
}
}
if (queueName.length() > maxSize) {
queueName = queueName.substring(0,maxSize);
}
if(StringUtil.isEmpty(queueName) || "200000".equals(queueName)){
queueName = NetworkUtils.getUniqueId(context);
}
return queueName;
}
public static String getMacAddr() {
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:",b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
}
return "02:00:00:00:00:00";
}
结合了好多人的经验,因为一直没找到源头,座、