【Android】デバイスID番号の取得

2051 ワード

各Androidデバイスを一意に識別できるシーケンス番号を取得するにはどうすればいいですか?
この問題には多くの答えがあるが、彼らの大部分は場合によっては有効である.
テストに基づいて:
すべてのデバイスはTelephonyManager.getDeviceId() を返すことができます.
すべてのGSMデバイス(テストデバイスにSIMカードが搭載されている)は、TelephonyManager.getSimSerialNumber() を返すことができます.
すべてのCDMAデバイスはgetSimSerialNumber()に対して空の値を返します!
Googleアカウントを追加したすべてのデバイスは、ANDROID_ID に戻ることができます.
すべてのCDMAデバイスは、設定時にGoogleアカウントが追加する限り、ANDROID_ID およびTelephonyManager.getDeviceId()に対して同じ値を返す.
まだテストされていない:SIMカードのないGSMデバイス、グーグルアカウントを追加していないGSMデバイス、飛行モードのデバイス.
だから、デバイスの唯一のシーケンス番号を手に入れたいなら、TelephonyManager.getDeviceId()で十分です.しかし、DeviceIDが明らかになった場合、一部のユーザーが不満を抱く可能性があるので、これらのidを暗号化したほうがいいです.実際に暗号化するシーケンス番号は、デバイスを一意に識別することができ、ユーザの特定のデバイス、例えばStringを使用することは明らかではない.hashCode()は、UUIDと結合しています.1 final   TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); 2
  3      final   String tmDevice, tmSerial, tmPhone, androidId; 4      tmDevice =  ""   + tm.getDeviceId(); 5      tmSerial =  ""   + tm.getSimSerialNumber(); 6      androidId =  ""   + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID); 7
  8      UUID deviceUuid =  new   UUID(androidId.hashCode(), (( long )tmDevice.hashCode() <<  32 ) | tmSerial.hashCode()); 9      String uniqueId = deviceUuid.toString();
最後のデバイスIDは、00000000-54b3-e7c7-0000-000046bffd97という結果になる可能性があります.