android 获得Android设备唯一标识码 ANDROID_ID+Build.SERIAL再进行MD5加密
16lz
2021-01-23
android 获得Android设备唯一标识码 ANDROID_ID+Build.SERIAL再进行MD5加密
- 前言
- 选择
前言
先来读这篇文章,我觉得写的挺好的,也很全面:
如何唯一的标识一台Android设备?
相关内容就不重复了
选择
从上面那篇文章可知道没有最完美的方案,但是实际有需求还是要解决的,那就执行最可行方案
我选择的是 ANDROID_ID+Build.SERIAL再进行MD5加密
代码如下:
import android.annotation.SuppressLint;import android.content.Context;import android.os.Build;import android.provider.Settings;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** * 获取android设备唯一标识码 * created by dlong in 2019/02/21 */public class GetAndroidUniqueMark { public static String getUniqueId(Context context){ @SuppressLint("HardwareIds") // ANDROID_ID是设备第一次启动时产生和存储的64bit的一个数,当设备被wipe后该数重置。 String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); @SuppressLint("HardwareIds") String id = androidID + Build.SERIAL; // +硬件序列号 try { return toMD5(id); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return id; } } public 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); } //返回整个结果 return sb.toString().substring(8,24); }}
代码不是我想出来的,从几篇文章整理出来的,但是已过很久,没找到源头。
但使用了好久没有问题,也没遇到版本兼容性的问题。
标转载。
完事。
更多相关文章
- android区分pad还是phone设备
- 全程不用usb数据线,adb通过网络连接Android设备
- Android进程管理机制及优化 for HTC HeRO(其它设备也可参考)+自动
- Android xliff和字符串资源
- 如何查看Android设备的CPU架构信息
- 【android】如何查看Android设备的CPU架构信息
- Linux/Ubuntu下android设备添加adb驱动
- android xliff字符串操作