Android-디바이스에 대한 고유값 생성

1 분 소요

Android Device ID 생성하기

Android 기기에 대한 고유 번호를 생성하기 위한 연구

  • android.os.Build 클래스 설명
  • android.os.BUILD 퍼블릭 클래스는 현재 빌드 정보와 공개된 시스템 프로퍼티정보를 제공한다.
  • android.os.BUILD 는 스텍틱 클래스이고, 정보를 수정하거나 삭제 하는게 아니라, 오직 읽기만 가능합니다. 그렇기 때문에 모든 필드는 public static String 을 기본으로 한다.
package com.getDeviceInfoTest.osimfo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;

import android.os.Bundle;
//import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.util.Log;

import java.util.UUID;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "PhoneState";
    private AppCompatActivity activity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        activity = this;

        /*unique device ID 생성*/
        String device_unique = getUniqueID(activity.getApplicationContext());
        // getApplicationContext() 메소드
        // context를 얻어올 수 있다.
        // 안드로이드 context 에는 Application context와 Acitivty context가 있다.
        // 어플리케이션의 Context가 return된다. 현재 activiy의 context 뿐만 아니라 application의 lifeCycle에 해당하는 Context가 사용된다.
        // getApplicationContext()는 application context 의미 한다.

        Log.i(TAG, "============ 디바이스 고유키 ============");
        Log.d("device_key", device_unique);

        Log.i(TAG, "============ 디바이스 정보 추출============");
        Log.i(TAG, "BOARD = " + Build.BOARD);
        Log.i(TAG, "BRAND = " + Build.BRAND);
        Log.i(TAG, "CPU_ABI = " + Build.CPU_ABI);
        Log.i(TAG, "DEVICE = " + Build.DEVICE);
        Log.i(TAG, "DISPLAY = " + Build.DISPLAY);
        Log.i(TAG, "FINGERPRINT = " + Build.FINGERPRINT);
        Log.i(TAG, "HOST = " + Build.HOST);
        Log.i(TAG, "ID = " + Build.ID);
        Log.i(TAG, "MANUFACTURER = " + Build.MANUFACTURER);
        Log.i(TAG, "MODEL = " + Build.MODEL);  //디바이스 모델명
        Log.i(TAG, "PRODUCT = " + Build.PRODUCT);
        Log.i(TAG, "TAGS = " + Build.TAGS);
        Log.i(TAG, "TYPE = " + Build.TYPE);
        Log.i(TAG, "USER = " + Build.USER);
    }

    public String getUniqueID(Context context) {
        //매개변수인 Context로는 MainActivity.this 등으로 넣어주면 됩니다.

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

        //TelephonyManger 클래스를 Context.TELEPHONY_SERVICE를 이용하여 호출
        //단말기 정보를 가져온다. 안드로이드 OS에서 제공되는 디바이스 ID 생성메소드
        // String phoneNum = tm.getLine1Number(); 는 휴대폰 번호를 가져온다.
        // String deviceID = tm.getDeviceId();

        final String tmDevice, tmSerial, androidId;
        tmDevice = "" + tm.getDataState();
        //tmSerial = "" + tm.getSimSerialNumber();
        tmSerial = "" + 123456789; //test
        androidId = "" + android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
        //ANDROID_ID를 가져와서 String 객체로 저장한다.
        UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode());
        //안드로이드에서는 기기의 ID와, 시리얼 넘버, 그리고 안드로이드 시큐리티(Security) ID 이 세 가지의 해시 값을 사용하여 UUID가 생성된다.
        String deviceId = deviceUuid.toString();
        return deviceId;
        }

}

태그:

카테고리:

업데이트:

댓글남기기