1.TelephonyManager를 이용한 DeviceId가져와 사용하는 방법
안드로이드 디바이스는 제조사 마다 다양하게 커스터마이징 가능 하기 때문에 000000000000000 같이 의미 없는 값이나 null 이 반환 될수도 있다.
TelephonyManager mgr = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
String idByTelephonyManager = mgr.getDeviceId();
2.ANDROID_ID를 사용하는 방법
가장 명확한 방법. 디바이스가 최초 Boot 될때 생성 되는 64-bit 값이다. 하지만 ANDROID_ID 또한 단점이 있는데, Proyo 2.2 이전 Version 에는 100% 디바이스 고유 번호를 획득 한다고는 보장 할 수 없으며, 몇몇 Vendor 에서 출하된 디바이스에 동일한 고유 번호(ex."9774d56d682e549c")가 획득 가능하다.
String idByANDROID_ID =
Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ANDROID_ID);
3.Serial Number를 사용하는 방법
안드로이드의 API Level 9 (진저브레드 2.3) 이후 부터 제공 하는 고유 번호 로서 TelephonyManager 클래스를 통한 획득 보다는 안전 하다고 할 수 있지만 2.3 미만의 Version 에서는 문제가 발생 할 수 가 있는 문제가 있어서 거의 사용하지 않는 방법이다.
try {
String idBySerialNumber = (String) Build.class.getField("SERIAL").get(null);
} catch (Exception e) {
e.printStackTrace();;
}
소스
import android.content.Context;
import android.content.SharedPreferences;
import android.provider.Settings.Secure;
import android.telephony.TelephonyManager;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
public class DeviceUuidFactory {
protected static final String PREFS_FILE = "device_id.xml";
protected static final String PREFS_DEVICE_ID = "device_id";
protected volatile static UUID uuid;
public DeviceUuidFactory(Context context) {
if (uuid == null) {
synchronized (DeviceUuidFactory.class) {
if (uuid == null) {
final SharedPreferences prefs = context
.getSharedPreferences(PREFS_FILE, 0);
final String id = prefs.getString(PREFS_DEVICE_ID, null);
if (id != null) {
// Use the ids previously computed and stored in the
// prefs file
uuid = UUID.fromString(id);
} else {
final String androidId = Secure.getString(
context.getContentResolver(), Secure.ANDROID_ID);
// Use the Android ID unless it's broken, in which case
// fallback on deviceId,
// unless it's not available, then fallback on a random
// number which we store to a prefs file
try {
if (!"9774d56d682e549c".equals(androidId)) {
uuid = UUID.nameUUIDFromBytes(androidId
.getBytes("utf8"));
} else {
final String deviceId = (
(TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE))
.getDeviceId();
uuid = deviceId != null ? UUID
.nameUUIDFromBytes(deviceId
.getBytes("utf8")) : UUID
.randomUUID();
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
// Write the value out to the prefs file
prefs.edit()
.putString(PREFS_DEVICE_ID, uuid.toString())
.commit();
}
}
}
}
}
public UUID getDeviceUuid() {
return uuid;
}
}
'Study > Android' 카테고리의 다른 글
[Android] TextView border, Textview 라인수, 외부 폰트 적용 (0) | 2019.06.12 |
---|---|
[Android ] Listview 위아래 스크롤 감지, ListView Focus (0) | 2019.06.12 |
[Android] AES 암호화, 복호화 (0) | 2019.06.12 |
[Android] Proguard(프로가드) 추가 (0) | 2019.06.12 |
[Android] 맥에서 안드로이드 apk 디컴파일 하기 (0) | 2019.06.12 |