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

안드로이드 기기의 기본 이메일 주소를 가져오는 방법 (단계별 예제)

안드로이드 기기의 기본 이메일 주소 가져오기

이 예제는 AccountManager를 활용하여 안드로이드 기기에 등록된 기본(Primary) 이메일 주소를 가져오는 방법을 보여줍니다. 기기에 로그인된 계정 목록을 조회한 뒤, 이메일 형식에 맞는 계정만 필터링하여 화면에 표시하는 방식입니다.

핵심 동작 원리

  • AccountManager: 기기에 등록된 모든 계정 정보를 조회하는 시스템 서비스입니다.
  • Patterns.EMAIL_ADDRESS: 계정 이름이 유효한 이메일 형식인지 검사하는 정규식 패턴입니다.
  • GET_ACCOUNTS 권한: 계정 정보에 접근하려면 매니페스트에 권한 선언과 런타임 권한 요청이 반드시 필요합니다.

1단계 — 새 프로젝트 생성

Android Studio에서 File ⇒ New Project로 이동하여 새 프로젝트를 만들고, 프로젝트 생성에 필요한 모든 세부 정보를 입력합니다.

2단계 — 레이아웃 파일 수정

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

<?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"
    android:padding="8dp"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:textStyle="bold"
        android:textAlignment="center"
        android:text="Primary email Address: testemail@gmail.com" />
</RelativeLayout>

3단계 — 메인 액티비티 구현

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

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.util.Patterns;
import android.widget.TextView;
import android.widget.Toast;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity {
    private Activity activity = MainActivity.this;
    private static final int PERMISSION_REQUEST_CODE = 1;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        String wantPermission = Manifest.permission.GET_ACCOUNTS;
        if (!checkPermission(wantPermission)) {
            requestPermission(wantPermission);
        } else {
            getEmails();
        }
    }
    private void getEmails() {
        Pattern emailPattern = Patterns.EMAIL_ADDRESS;
        Account[] accounts = AccountManager.get(this).getAccounts();
        for (Account account : accounts) {
            if (emailPattern.matcher(account.name).matches()) {
                String TAG = "MainActivity";
                Log.d(TAG, String.format("%s - %s", account.name, account.type));
                textView.setText("Primary email Address: " + accounts.toString());
            }
        }
    }
    private boolean checkPermission(String permission) {
        if (Build.VERSION.SDK_INT >= 23) {
            int result = ContextCompat.checkSelfPermission(activity, permission);
            return result == PackageManager.PERMISSION_GRANTED;
        } else {
            return true;
        }
    }
    private void requestPermission(String permission) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)) {
            Toast.makeText(activity, "Get account permission allows us to get your email", Toast.LENGTH_LONG).show();
        }
        ActivityCompat.requestPermissions(activity, new String[]{permission}, PERMISSION_REQUEST_CODE);
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[]
    permissions, @NonNull int[] grantResults) {
        if (requestCode == PERMISSION_REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                getEmails();
            } else {
                Toast.makeText(activity, "Permission Denied.", Toast.LENGTH_LONG).show();
            }
        }
    }
}

4단계 — 매니페스트에 권한 추가

androidManifest.xml에 아래 코드를 추가합니다. GET_ACCOUNTS 권한 선언이 반드시 포함되어야 합니다.

<?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.GET_ACCOUNTS" />
    <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 아이콘을 클릭하세요. 실행 옵션에서 자신의 모바일 기기를 선택하면, 앱이 설치되고 아래와 같은 기본 화면이 기기에 표시됩니다.

안드로이드 기기의 기본 이메일 주소를 가져오는 방법 (단계별 예제)

주의 사항

이 프로그램은 루팅(Rooted)된 기기에서만 정상적으로 작동합니다. 또한 Android 6.0(API 23) 이상에서는 GET_ACCOUNTS 권한이 런타임 권한으로 분류되므로, 위 예제처럼 실행 중에 사용자에게 권한을 요청하는 처리가 반드시 필요합니다. 권한이 거부되면 계정 정보에 접근할 수 없으니 이 점을 유의하세요.