3

アプリのuuidを生成したいのですが、wifi macアドレス、android idの取得、シリアル番号、デバイス android.os.Buildプロパティからの疑似uuidの作成など、多くのことを試しました。

また、Java自体がUuidクリエータークラスを取得していることも知りました java.util.UUID

いくつかの記事やブログを読んで、これについて少し混乱しています。2 つの Android デバイスがこの Java class( ) を使用して uuid を作成している場合、java.util.UUIDそれは一意になるか、重複する可能性があるか知りたいですか?

また、一部のデバイスでは、を使用してシリアル番号を見つけることができませんでしたandroid.os.Build.SERIAL。デバイスのシリアル番号を取得する別の方法はありますか

4

2 に答える 2

9

java.util.UUID のrandomUUID()関数を使用していると仮定すると、理論的には重複の可能性がありますが、それは信じられないほど遠いものです。生成される ID はRFC4122バージョン 4 ID で、122 ビットがランダムに設定されています。つまり、5.32 x 10^36 の可能な値があることを意味します。ある観点から見ると、デバイスが 10 億個あり、それぞれが毎秒 10 億個の ID を生成している場合、それらが完了するまでに約 1,680 億年かかります (宇宙の年齢の約 10 倍)。

したがって、はい、重複は可能ですが (Java が高品質の乱数ジェネレーターを使用していると仮定すると)、実際に重複が発生する可能性は非常に低いため、意味がありません。

于 2012-12-19T05:26:26.420 に答える
1

デバイス ID を取得するには Telephoney を使用 U はここで使用できます is it is

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 に答える