安卓设备相对靠谱设备唯一码

public class DeviceIdUtils {


    /**
     * 获取唯一id
     * @param context
     * @return
     */
    public static String getDeviceUUID(Context context) {
        String uuid = loadDeviceUUID(context);
        if (TextUtils.isEmpty(uuid)) {
            uuid = buildDeviceUUID(context);
            saveDeviceUUID(context, uuid);
        }
        return uuid;
    }

    private static String buildDeviceUUID(Context context) {
        String androidId = getAndroidId(context);
        if ("9774d56d682e549c".equals(androidId)) {
            Random random = new Random();
            androidId = Integer.toHexString(random.nextInt())
                    + Integer.toHexString(random.nextInt())
                    + Integer.toHexString(random.nextInt());
        }
        return new UUID(androidId.hashCode(), getBuildInfo().hashCode()).toString();
    }

    private static void saveDeviceUUID(Context context, String uuid) {
        context.getSharedPreferences("device_uuid", Context.MODE_PRIVATE)
                .edit()
                .putString("uuid", uuid)
                .apply();
    }

    @Nullable
    private static String loadDeviceUUID(Context context) {
        return context.getSharedPreferences("device_uuid", Context.MODE_PRIVATE)
                .getString("uuid", null);
    }

    public static String getAndroidId(Context context) {
        return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
    }

    public static String getBuildInfo() {
        //这里选用了几个不会随系统更新而改变的值
        StringBuffer buildSB = new StringBuffer();
        buildSB.append(Build.BRAND).append("/");
        buildSB.append(Build.PRODUCT).append("/");
        buildSB.append(Build.DEVICE).append("/");
        buildSB.append(Build.ID).append("/");
        buildSB.append(Build.VERSION.INCREMENTAL);
        return buildSB.toString();
        //        return Build.FINGERPRINT;
    }
}

.
.
使用

DeviceIdUtils.getDeviceUUID(MainActivity.this)

.
.

此类非原创。

推荐阅读更多精彩内容

  • 唯一标识符最佳做法 目录 使用 Android 标识符的最佳做法 Android 8.0 及更高版本中的标识符 使...
    StoneWay3阅读 1,365评论 0 0
  • 放下执着心,只保留核心项的自律。时间是有限的,只有舍掉一些东西才能得到另外的东西,生活中时时处处都无不是一种断舍离...
    老庄梦谈阅读 207评论 6 5
  • 上卷-素问 篇1:上古天真论 昔在黄帝,生而神灵,弱而能言,幼而徇齐,长而敦敏,成而登天。乃问于天师曰:余闻上古之...
    cangyu2013阅读 366评论 1 0
  • 早晨刷牙,听着马吉薇納读林清玄的文章,关于生活质量。我忽然意识到,我每日听的音频是那么多,音乐,冥想,读佛经。我除...
    万里无云2018阅读 46评论 0 0
  • 给十年前没心没肺又很努力的自己: 十年了,过得真快。 十年了,没想到我活成了这样。 十年了,感谢这个没心没肺却很努...
    冰果真多阅读 51评论 0 3