3

我想为我的应用程序生成一个 uuid,我尝试了很多东西,例如 wifi mac 地址、获取 android id、序列号、从设备 android.os.Build属性创建伪 uuid。

我也开始知道 java 本身有 Uuid 创建者类 java.util.UUID

通过浏览几篇文章和博客,我对此有点困惑。我想知道,如果两个 android 设备正在使用这个 java 类(java.util.UUID)创建 uuid,那将是唯一的还是有重复的机会?

同样在某些设备中,我无法使用android.os.Build.SERIAL. 是否有其他方法来获取设备的序列号

4

2 回答 2

9

假设您使用的是 java.util.UUID 的randomUUID()函数,理论上存在重复的可能性,但它非常遥远。生成的 id 是RFC4122 version-4 id,随机设置 122 位。这意味着有 5.32 x 10^^36 个可能的值。从某种角度来看,如果你有 10 亿台设备,每台设备每秒生成 10 亿个 ID,它们大约需要 1680 亿年才能完成(大约是宇宙年龄的 10 倍)。

所以,是的,重复是可能的,但是(假设 Java 使用的是高质量的随机数生成器),它实际发生的几率是如此遥远以至于毫无意义。

于 2012-12-19T05:26:26.420 回答
1

获取设备 ID 使用电话 U 可以在这里使用它是

public static String deviceUDID(Context ctx) {
     final TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);

     final String tmDevice, tmSerial, androidId;
     tmDevice = "" + tm.getDeviceId();
     tmSerial = "" + tm.getSimSerialNumber();
     androidId = "" +android.provider.Settings.Secure.getString(ctx.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

     UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
     String deviceId = deviceUuid.toString();
     Log.d("Device Id", deviceId);
     return deviceId;
} 
于 2012-12-19T05:20:47.603 回答