Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

프로그래밍 방식으로 Android 일련번호(Serial Number) 가져오는 방법

프로그래밍 방식으로 Android 일련번호(Serial Number) 가져오는 방법

이 튜토리얼에서는 앱 코드에서 Android 기기의 고유 일련번호를 가져오는 방법을 단계별로 살펴봅니다. 핵심은 Build.getSerial() 메서드로, Android 8.0 오레오(API 26)부터 제공되며 호출하려면 READ_PHONE_STATE 권한이 반드시 필요합니다. 사용자에게 권한을 요청한 뒤 승인되면 일련번호를 화면에 표시하는 구조입니다.

1단계 − Android Studio에서 새 프로젝트 생성

Android Studio에서 File ⇒ New Project를 선택해 새 프로젝트를 만들고, 필요한 모든 세부 정보를 입력합니다.

2단계 − 레이아웃 파일(activity_main.xml) 작성

res/layout/activity_main.xml에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/text"
        android:textSize="30sp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

위 코드에서는 가져온 일련번호를 화면에 표시하기 위해 TextView 하나를 배치했습니다.

3단계 − MainActivity.java 작성

src/MainActivity.java에 다음 코드를 추가합니다.

package com.example.myapplication;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.text);
        // READ_PHONE_STATE 권한이 없으면 사용자에게 요청
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_PHONE_STATE}, 101);
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 101:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                            != PackageManager.PERMISSION_GRANTED) {
                        return;
                    }
                    // 권한이 승인되면 일련번호 표시
                    textView.setText(Build.getSerial());
                } else {
                    // 권한이 거부된 경우의 처리
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onResume() {
        super.onResume();
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        textView.setText(Build.getSerial());
    }
}

코드 흐름을 정리하면 다음과 같습니다. 먼저 onCreate()에서 READ_PHONE_STATE 권한이 부여되어 있는지 확인하고, 없으면 권한 요청 다이얼로그를 띄웁니다. 사용자가 권한을 승인하면 onRequestPermissionsResult() 콜백이 호출되며, 이때 Build.getSerial()로 일련번호를 가져와 TextView에 출력합니다. 또한 onResume()에서도 권한 상태를 다시 확인해, 이미 권한이 있는 경우에는 즉시 일련번호를 표시하도록 처리했습니다.

4단계 − AndroidManifest.xml에 권한 선언

AndroidManifest.xml에 다음 코드를 추가합니다. READ_PHONE_STATE 권한 선언이 반드시 포함되어야 합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 Android 스마트폰을 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 옵션 목록에서 연결된 모바일 기기를 선택하세요. 그러면 앱이 설치되어 실행되고, 권한을 허용하면 아래와 같이 기기의 일련번호가 화면에 표시됩니다.

프로그래밍 방식으로 Android 일련번호(Serial Number) 가져오는 방법

참고 사항

Android 10(API 29) 이상에서는 보안 정책 강화로 인해 일반 서드파티 앱이 Build.getSerial()을 호출하면 SecurityException이 발생할 수 있습니다. 이 경우 해당 값은 시스템 권한(READ_PRIVILEGED_PHONE_STATE)을 가진 앱만 읽을 수 있으므로, 기기 식별이 꼭 필요하다면 안드로이드 공식 문서에서 권장하는 대체 식별자(예: SSAID, 광고 ID 등)를 함께 검토하는 것이 좋습니다.