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

안드로이드 앱에서 전화번호를 프로그래밍 방식으로 가져오는 방법 (예제 코드)

이 튜토리얼에서는 안드로이드 앱 내부에서 코드만으로 기기의 전화번호를 가져오는 방법을 단계별로 살펴봅니다.

1단계 — 새 프로젝트 생성

Android Studio를 실행한 뒤 File ⇒ New Project 메뉴로 이동하고, 필요한 항목을 모두 입력하여 새 프로젝트를 생성합니다.

2단계 — 레이아웃 작성 (res/layout/activity_main.xml)

아래 코드를 activity_main.xml 파일에 추가합니다. 화면 중앙에 전화번호가 표시될 TextView 하나를 배치하는 간단한 구성입니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:layout_centerInParent="true"
        android:textSize="24sp"
        android:textStyle="bold"/>
</RelativeLayout>

3단계 — MainActivity.java 구현

TelephonyManager의 getLine1Number() 메서드를 사용해 전화번호를 조회합니다. 민감한 정보에 접근하므로 런타임 권한(READ_PHONE_STATE) 요청과 그 결과를 처리하는 로직도 함께 포함되어 있습니다.

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    TextView textView;
    private static final int REQUEST_CODE = 101;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        TelephonyManager telephonyManager = (TelephonyManager)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) {
            ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE);
        }
        textView.setText(telephonyManager.getLine1Number());
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
        switch (requestCode) {
            case REQUEST_CODE: {
                if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    Toast.makeText(this, "Permission Granted",Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Permission Denied",Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
}

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="app.com.sample">
    <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 Studio에서 프로젝트의 액티비티 파일 중 하나를 열고 툴바의 Run 아이콘을 클릭하세요. 기기 선택 목록에서 본인의 모바일 기기를 고르면, 해당 기기 화면에 아래와 같이 기본 화면이 나타납니다.

안드로이드 앱에서 전화번호를 프로그래밍 방식으로 가져오는 방법 (예제 코드)

추가 참고 사항

  • 번호가 비어 있을 수 있습니다. getLine1Number()는 SIM 카드나 통신사 데이터에 번호가 저장되어 있지 않으면 null 또는 빈 문자열을 반환할 수 있습니다. 일부 통신사는 번호를 아예 제공하지 않으므로, 실서비스에서는 SMS 인증 등 대체 수단을 함께 고려하는 것이 좋습니다.
  • 최신 OS 권한 주의: Android 10(API 29) 이상 환경에서는 READ_PHONE_NUMBERS 권한이 함께 필요할 수 있으며, Play 스토어 심사 시 해당 권한 사용 사유를 명확히 해야 합니다.
  • AndroidX 마이그레이션 권장: 위 예제는 구버전 support library를 사용하지만, 신규 프로젝트라면 androidx.appcompat.app.AppCompatActivity 및 AndroidX 버전 ActivityCompat/ActivityCompat.requestPermissions()로 교체하는 것이 바람직합니다.