2022년 10월 10일 월요일

Android 10이상에서 IMEI

Android 10이상에서 IMEI

[Android] Android 10이상에서 IMEI대응책

안드로이드 OS가 아닌 단말기 마다 다르게 적용되는 통신관련정보(통신사, 전화번호, 단말ID등) 들은 TelephonyManager 라는 패키지를 통해 제공된다.

https://developer.android.com/reference/android/telephony/TelephonyManager.html

권한이 필요하다.

<uses-permission android:name="android.permission.READ_PHONE_STATE>

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

Android 10 에서 IMEI(고유식별번호)가 공백을 반환하기 때문에 단말초기기동시에 할당되는 값을 아래처럼 사용하면된다.

String androidId = Settings.Secure.getString(getContentResolver(),
Settings.Secure.ANDROID_ID);

최신폰에서는 추천하는 방법이지만 예전폰에서는 단말회사에 따라 모두 같은 번호를 가질 위험성도 있다.

따라서 제일좋은 방법은 UUID를 생성해서 SharedPreference에 넣어두고 사용하는 방법이다.

https://ssaurel.medium.com/how-to-retrieve-an-unique-id-to-identify-android-devices-6f99fd5369eb


String androidId = Settings.Secure.getString(getContentResolver(),  
      Settings.Secure.ANDROID_ID);

String tmSerial = "" + tm.getSimSerialNumber();  
String tmDevice = "" + tm.getDeviceId();  

UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());  
return deviceUuid.toString();

이렇게 deviceId, SimSerial 을 다같이 조합해서 UUID를 만들면 어떤 OS 단말에서도 같은UUIS가 나오지 않게 된다. (스택님들이 https://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id)

0 comments:

댓글 쓰기