【Android】デバイスID番号の取得
2051 ワード
各Androidデバイスを一意に識別できるシーケンス番号を取得するにはどうすればいいですか?
この問題には多くの答えがあるが、彼らの大部分は場合によっては有効である.
テストに基づいて:
すべてのデバイスは
すべてのGSMデバイス(テストデバイスにSIMカードが搭載されている)は、
すべてのCDMAデバイスは
Googleアカウントを追加したすべてのデバイスは、
すべてのCDMAデバイスは、設定時にGoogleアカウントが追加する限り、
まだテストされていない:SIMカードのないGSMデバイス、グーグルアカウントを追加していないGSMデバイス、飛行モードのデバイス.
だから、デバイスの唯一のシーケンス番号を手に入れたいなら、
最後のデバイスIDは、
この問題には多くの答えがあるが、彼らの大部分は場合によっては有効である.
テストに基づいて:
すべてのデバイスは
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
という結果になる可能性があります.