조회 수 16051 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

TelephonyManager.getDeviceId() 가 참 유용하기는 한데, 핸드폰에서만 되지 태블릿이나 웨어러블 기기에서는 null 값을 넘긴다고 합니다.

그러면 도대체 어떻게 디바이스를 정확하게 구분할 수 있을까요? 여러 자료들을 찾아보던 중, 카톡 SDK 에 다음 함수가 있음을 알 수 있었습니다.

public static String getDeviceUUID(final Context context) {
    final SharedPreferencesCache cache = Session.getAppCache();
    final String id = cache.getString(PROPERTY_DEVICE_ID);
 
    UUID uuid = null;
    if (id != null) {
        uuid = UUID.fromString(id);
    } else {
        final String androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
        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);
        }
 
        Bundle bundle = new Bundle();
        bundle.putString(PROPERTY_DEVICE_ID, uuid.toString());
        cache.save(bundle);
    }
 
    return uuid.toString();
}


내용은 다음과 같습니다.

  1. 먼저 가장 정확하다고 알려진 ANDROID_ID 를 가져옵니다.
  2. 하지만 예전 어떤 기기에서 특정 번호로만 나오던 버그가 있었다고 합니다. 이에 대한 예외처리를 해줍니다.
  3. ANDROID_ID 가 없으면 getDeviceID() 를 사용합니다.
  4. 둘 다 실패하면, 랜덤하게 UUID 를 발생시킵니다.
  5. 4번은 랜덤한 값이지만 preference 에 저장해두고 사용하기 때문에 삭제하고 재설치하지 않는 이상 랜덤한 넘버를 두번 만들지는 않습니다.

 

(참고자료 1) 안드로이드 개별 디바이스를 번역하는 방법 (안드로이드 공식 블로그의 번역) http://huewu.blog.me/110107222113

(참고자료 2) IMEI, MEID, ESN, IMSI 등에 대해 자세히 나옴 http://www.webs.co.kr/index.php?mid=adnroid&sort_index=readed_count&order_type=asc&page=2&document_srl=38470

(참고자료 3) Stack Overflow 의 방대한 문답들 http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id

(참고자료 4) 카카오톡 안드로이드 SDK https://developers.kakao.com/docs/android


Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
491 MFC 현재디렉토리의 파일리스트들을 알아오는 클래스 CFindFile 2008.05.07 63080 0
490 LINUX [Shell Script] bash에서 source 명령 2012.01.02 62503 0
489 MFC MFC에서 커맨드 인자(cmd argument) 사용하기 2010.12.13 62134 0
488 C# C# 문자열 숫자형식 포맷팅 String.Format ( C# Numberic Formatting ) 2012.10.10 59859 0
487 MFC 폴더가 존재하는 지 확인하고, 없으면 만드는 함수 2010.02.01 58958 0
486 C# C# 형변환 (문자형 -> 숫자형) / C# Type Change (string -> number) 2012.04.12 57755 0
485 MFC CFileDialog 초기 폴더 지정 2010.08.11 57604 0
484 MFC CString을 유니코드로 변환 WCHAR에 저장하는 방법 1 2006.04.14 57283 0
483 LINUX [Shell Script] 파일을 한줄씩 읽어오기 2014.10.03 56727 0
482 LINUX screen 명령어, 터미널 멀티세션 제공 1 2014.01.21 55874 0
481 MFC Cstring methods 2009.04.21 55444 0
480 MFC 파일 읽기 전용 해제 및 설정 2009.09.11 54745 0
479 C Linked List 예제 (단순 연결 리스트) file 2005.08.10 54528 0
478 일반 bat(배치) 파일 제대로 쓰기 2009.02.24 54425 0
477 MFC 시스템 출력 리디렉션 - 도스 커맨드 결과 받아오기 file 2007.08.14 53492 0
목록
Board Pagination ‹ Prev 1 2 3 4 5 6 7 8 9 10 ... 34 Next ›
/ 34

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5