Android获取唯一设备ID解决方案

Android 获取唯一设备ID的方法挺多。但是都不完美,要不就是有的会随着恢复出厂设置改变。要不就是不是唯一,再或者取不到。这里把Android_id,SerialNumber和UniquePsuedoID结合在一起写了一个工具类。暂未发现取不到或者不唯一的情况
另包含获取设备常用信息的方法

直接上代码

public class CarOnlyIdUtils {
    public static String getANDROID_ID(Context context){
        String ANDROID_ID="";
        try {
            ANDROID_ID = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID);
            if(TextUtils.isEmpty(ANDROID_ID)){
                return "";
            }
        }catch (Exception e){
            return "";
        }

        return  ANDROID_ID;
    }


    public static String getSerialNumber(){
        String SerialNumber = "";

        try {
            SerialNumber = Build.SERIAL;

            if(TextUtils.isEmpty(SerialNumber)){
                return "";
            }
        }catch (Exception e){
            return "";
        }

        return  SerialNumber;
    }

    public static String getUniquePsuedoID(){
        try {
            String m_szDevIDShort = "35" + (Build.BOARD.length() % 10) + (Build.BRAND.length() % 10) + (Build.CPU_ABI.length() % 10) + (Build.DEVICE.length() % 10) + (Build.MANUFACTURER.length() % 10) + (Build.MODEL.length() % 10) + (Build.PRODUCT.length() % 10);


            String serial = null;
            try
            {
                serial = Build.class.getField("SERIAL").get(null).toString();

                return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
            }
            catch (Exception e)
            {
                serial = "serial"; // some value
            }

            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        }catch (Exception e){
            return "";
        }
    }


    public static String getOnlyID(Context context){
        String onlyId = getANDROID_ID(context)+getSerialNumber()+getUniquePsuedoID();

        return getMD5Str(onlyId);
    }

    private static String getMD5Str(String str)
    {
        MessageDigest messageDigest = null;
        try
        {
            messageDigest = MessageDigest.getInstance("MD5");
            messageDigest.reset();
            messageDigest.update(str.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e)
        {
//            System.out.println("NoSuchAlgorithmException caught!");
            System.exit(-1);
        } catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }

        byte[] byteArray = messageDigest.digest();

        StringBuffer md5StrBuff = new StringBuffer();

        for (int i = 0; i < byteArray.length; i++)
        {
            if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
                md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
            else
                md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
        }
        return md5StrBuff.toString();
    }


    public static String getSystemVersion() {
        return Build.VERSION.RELEASE;
    }


    public static String getDeviceBrand(){
        String brand = Build.BRAND;
        return brand;
    }

    public static String getSystemModel(){
        String model = Build.MODEL;
        return model;
    }

    public static String getAppVersion(Context context){
        PackageManager packageManager = context.getPackageManager();
        PackageInfo packInfo = null;
        try {
            packInfo = packageManager.getPackageInfo(context.getPackageName(),0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        return packInfo.versionName;
    }

    public static String getDevice(Context context){

        return "app版本:"+getAppVersion(context)+"\n"+"手机品牌:"+getDeviceBrand()+"\n"+"手机型号:"+getSystemModel()+"\n"+"Android系统版本号:"+getSystemVersion()+"\n"+"onlyID:"+getOnlyID(context)+"\n"
                +"ANDROID_ID:"+getANDROID_ID(context)+"\n"
                +"SerialNumber:"+getSerialNumber()+"\n"
                +"UniquePsuedoID:"+getUniquePsuedoID()+"\n";
    }

}


 Previous
Storyboard跳转与传值 Storyboard跳转与传值
最近学习了一下使用Storyboard实现页面跳转已经传值 总结一下 Storyboard跳转1单纯的Storyboard页面跳转新建项目 如图: 打开Main.storyboard文件 添加Navigation Controller 在
2019-05-10
Next 
解决WebView上传图片无法调起 解决WebView上传图片无法调起
最近要实现html中调起手机的相册上传图片功能。结果发现IOS可以正常调起来。android不行。经检验需要在原生代码中进行处理 如图 参考代码java代码 public class Test1Activity extends AppCo
2019-05-08 骑着猪看海
  TOC