2012-12-19 2 views
2

나는 내 장치에 대한 awuid를 생성하고 싶다. wifi mac address, 안드로이드 아이디, 시리얼 넘버, 디바이스에서 의사 uuid 생성하기와 같은 많은 것들을 시도했다. android.os.Build 속성. 안드로이드와 자바 Uuid

는 나 또한 내가 이것에 대해 조금 혼란 스러워요 여러 기사와 블로그를 통해 이동하여 그 자바 자체가 가지고 UUID 만든 클래스를 java.util.UUID

을 알게되었습니다. 나는이 안드로이드 장치가이 Java 클래스 (java.util.UUID)를 사용하여 uuid를 만들면 고유하거나 중복 될 가능성이 있는지 알고 싶습니다.

또한 일부 기기에서는 android.os.Build.SERIAL을 사용하여 일련 번호를 찾을 수 없습니다. 장치의 일련 번호를 얻을 수있는 또 다른 방법이있다

답변

8

가 거기에 당신이 java.util.UUID의 randomUUID() 기능을 사용하는 가정입니다 수 가져 오기 이론적으로 중복 될 확률은 높지만 엄청나게 멀리 떨어져 있습니다. 생성 된 ID는 RFC4122 버전 -4 ID이며 122 비트가 임의로 설정됩니다. 즉, 가능한 값은 5.32 x 10 ^^ 36입니다. 이것에 대한 몇 가지 관점에서 볼 때 초당 수십 억 개의 ID를 생성하는 10 억 개의 장치가 있다면이 장치를 완료하는 데 약 168 억 년이 걸릴 것입니다 (우주 시대의 10 배).

그래, 복제는 가능하지만 (Java가 고품질 난수 생성기를 사용한다고 가정 할 때) 실제로 발생하는 확률은 의미가 없으므로 너무 멀리 떨어져 있습니다.

+0

더 명확하게 말하면 복제의 가능성은 실제 세계에서 무시할 수 있다는 뜻입니다. 맞습니까? – edwin

+1

예. http://stackoverflow.com/questions/2513573/how-good-is-javas-uuid-randomuuid – broofa

+0

답변 해 주셔서 감사합니다. – edwin

1

장치 ID가 사용 Telephoney 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; 
} 
+0

이 기기 ID는 기기 일련 번호가 동일합니까? 이 코드가 태블릿에서도 작동합니까? (불행히도 나는 테스트를 위해 태블릿 장치가 없다) – edwin

+1

UUID 에 충돌을 해결하기 위해 추가 된 두 가지가 모두 다른 것은 아니며 그렇습니다. 아직 테스트되지 않았지만 그 타블렛에서 작동합니다. generic 당신은이 다른 "getSimSerialNumber()"이외의 다른 많은 매개 변수를 추가 할 수 있습니다. 더 많은 기능이 있습니다. –

+0

그러나 "getSimSerialNumber()"는 CDMA 장치의 경우 null을 반환합니다 (일부 타블렛 장치에서도 null을 줄 수 있음 기사를 읽음) 이 방법에 대해) – edwin