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

Android에서 기본 전화번호를 가져오는 방법 완벽 가이드

Android에서 기본 전화번호를 가져오는 방법

이 튜토리얼에서는 Android 앱에서 기기의 기본 전화번호(전화번호)를 가져오는 방법을 단계별로 알아봅니다. 전화번호를 읽어오려면 TelephonyManager 클래스와 함께 여러 권한을 요청하고 처리해야 합니다.

1단계: 새 프로젝트 생성

Android Studio에서 새 프로젝트를 생성합니다. 상단 메뉴에서 File → New Project로 이동한 후, 새 프로젝트 생성에 필요한 모든 세부 정보를 입력합니다.

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

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"
    android:orientation="vertical">
    <TextView
        android:id="@+id/text"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

위 코드에서는 화면 중앙에 전화번호를 표시하기 위한 TextView 하나를 배치했습니다. 텍스트 크기는 30sp로 설정되어 있어 번호가 잘 보이도록 구성했습니다.

3단계: MainActivity 코드 작성

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

package com.example.myapplication;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
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 {
    private static final int PERMISSION_REQUEST_CODE = 100;
    TextView textView;
    TelephonyManager telephonyManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.text);
        telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
        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) {
            ActivityCompat.requestPermissions(this, new String[]{READ_SMS, READ_PHONE_NUMBERS, READ_PHONE_STATE}, PERMISSION_REQUEST_CODE);
        } else {
            textView.setText(telephonyManager.getLine1Number());
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                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;
                } else {
                    textView.setText(telephonyManager.getLine1Number());
                }
        }
    }
}

위 코드의 핵심 동작 방식은 다음과 같습니다.

  • TelephonyManager 인스턴스 생성: 시스템 서비스인 TELEPHONY_SERVICE를 통해 전화 관련 정보에 접근합니다.
  • 권한 확인 및 요청: READ_SMS, READ_PHONE_NUMBERS, READ_PHONE_STATE 세 가지 권한이 모두 부여되지 않았다면 사용자에게 권한을 요청합니다.
  • 전화번호 표시: 권한이 이미 허용된 경우에는 getLine1Number() 메서드를 호출하여 기본 전화번호를 TextView에 출력합니다.
  • 권한 결과 처리: onRequestPermissionsResult() 콜백에서 사용자가 권한을 승인했는지 확인한 후, 승인되었다면 전화번호를 화면에 표시합니다.

4단계: AndroidManifest.xml 설정

AndroidManifest.xml 파일에 필요한 권한을 선언합니다.

<?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.READ_PHONE_NUMBERS" />
    <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에서 기본 전화번호를 가져오는 방법 완벽 가이드

참고 사항

  • getLine1Number()는 SIM 카드에 저장된 번호를 반환하므로, 일부 기기나 통신사에서는 null 또는 빈 값을 반환할 수 있습니다.
  • Android 6.0(API 23) 이상에서는 런타임 권한 요청이 필수입니다.
  • 더 안정적인 대안으로 Google Play Services의 Phone Number Hint API 또는 SMS Retriever API 활용을 고려해 보세요.