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

안드로이드(Android)에서 전화번호 가져오는 방법 – 단계별 구현 가이드

안드로이드에서 전화번호 가져오기 개요

이 튜토리얼에서는 안드로이드 앱에서 기기의 전화번호를 가져와 화면에 표시하는 방법을 단계별로 알아봅니다. 전화번호를 읽어오려면 READ_SMS, READ_PHONE_NUMBERS, READ_PHONE_STATE 세 가지 권한이 필요하며, 마시멜로(API 23) 이상 버전에서는 런타임 권한 요청 처리도 함께 구현해야 합니다.

1단계: 새 프로젝트 만들기

Android Studio를 실행하고 File ⇒ New Project 메뉴로 이동한 뒤, 프로젝트 생성에 필요한 모든 정보를 입력하여 새 프로젝트를 만듭니다.

2단계: 레이아웃 파일 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_height = "match_parent"
    tools:context = ".MainActivity">

    <TextView
        android:id = "@+id/phoneNumber"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "phone number"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintLeft_toLeftOf = "parent"
        app:layout_constraintRight_toRightOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />
</android.support.constraint.ConstraintLayout>

위 코드에서는 화면 정중앙에 하나의 TextView를 배치했습니다. 사용자가 앱을 실행하면 이 TextView에 기기의 전화번호가 표시됩니다.

3단계: MainActivity 코드 작성

src/MainActivity.java 파일에 아래 코드를 추가합니다.

package com.example.andy.myapplication;

import android.Manifest;
import android.content.Context;
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.telephony.TelephonyManager;
import android.widget.TextView;

import static android.Manifest.permission.READ_PHONE_NUMBERS;
import static android.Manifest.permission.READ_PHONE_STATE;
import static android.Manifest.permission.READ_SMS;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.phoneNumber);
        if (ActivityCompat.checkSelfPermission(this, READ_SMS) == PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(this, READ_PHONE_NUMBERS) ==
            PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
            READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
                TelephonyManager tMgr = (TelephonyManager)  this.getSystemService(Context.TELEPHONY_SERVICE);
                String mPhoneNumber = tMgr.getLine1Number();
                textView.setText(mPhoneNumber);
                return;
        } else {
            requestPermission();
        }
    }
    private void requestPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{READ_SMS, READ_PHONE_NUMBERS, READ_PHONE_STATE}, 100);
        }
    }
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case 100:
                TelephonyManager tMgr = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != 
                    PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED &&
                    ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) !=         PackageManager.PERMISSION_GRANTED) {
                        return;
                }
                String mPhoneNumber = tMgr.getLine1Number();
                textView.setText(mPhoneNumber);
                break;
        }
    }
}

코드 동작 원리


- onCreate(): READ_SMS, READ_PHONE_NUMBERS, READ_PHONE_STATE 권한이 이미 부여되었는지 확인합니다.
- 권한이 모두 승인된 상태라면 TelephonyManagergetLine1Number() 메서드로 전화번호를 가져와 TextView에 설정합니다.
- 권한이 없으면 requestPermission()을 호출해 런타임 권한을 요청합니다.
- onRequestPermissionsResult(): 권한 요청 결과(요청 코드 100)를 받아 처리하며, 승인되면 전화번호를 화면에 표시합니다.

앱 실행 및 결과 확인

실제 안드로이드 기기를 컴퓨터에 연결한 상태에서 Android Studio 툴바의 Run 아이콘을 클릭해 앱을 실행합니다. 디바이스 선택 창에서 자신의 모바일 기기를 고르면 아래와 같은 기본 화면이 나타납니다.

안드로이드(Android)에서 전화번호 가져오는 방법 – 단계별 구현 가이드

앱에 처음 진입하면 런타임 권한을 요청하는 대화상자가 표시됩니다. 모든 권한을 허용하면 위 스크린샷과 같이 기기의 전화번호가 화면에 출력됩니다.

참고 사항

일부 통신사나 기기에서는 SIM 카드에 전화번호가 저장되어 있지 않아 getLine1Number()가 빈 문자열을 반환할 수 있습니다. 이 경우 서버 측 검증이나 SMS 인증 등의 대체 방식을 함께 고려하는 것이 좋습니다.