안드로이드 기기의 기본 이메일 주소 가져오기
이 예제는 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 권한이 런타임 권한으로 분류되므로, 위 예제처럼 실행 중에 사용자에게 권한을 요청하는 처리가 반드시 필요합니다. 권한이 거부되면 계정 정보에 접근할 수 없으니 이 점을 유의하세요.