我想为我的应用程序生成一个uuid,我尝试了很多东西,比如wifi mac地址,获取android,序列号,从设备android.os.Build
属性创建伪uuid。
我还了解到java本身拥有Uuid创建者类java.util.UUID
。
通过阅读几篇文章和博客,我对此感到有点困惑。我想知道,如果两个android设备使用这个java类(java.util.UUID
)创建uuid,这是唯一的还是有可能重复?
另外,在一些设备中,我无法使用android.os.Build.SERIAL
找到序列号。是否有其他方法可以获取设备序列号
发布于 2012-12-19 13:26:26
假设您使用的是java.util.UUID的randomUUID()
函数,理论上存在复制的可能性,但它非常遥远。所生成的ids是RFC4122版本4 ids,其具有随机设置的122位。这意味着有5.32x10^^36个可能的值。从某种角度来看,如果你有10亿台设备,每台设备每秒产生10亿个if,它们大约需要1680亿年才能完成(大约是宇宙年龄的10倍)。
所以,是的,复制是可能的,但是(假设Java正在使用一个高质量的随机数生成器),它实际发生的可能性是如此之小,以至于没有意义。
发布于 2012-12-19 13:20:48
要获取设备ID,请使用Telephoney,您可以在这里使用它
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;
}
https://stackoverflow.com/questions/13945849
复制相似问题