Pick an Email from accounts

Choosing email from device accounts should be done by AccountPicker.

Steps:

1. Add below dependency in app/build.gradle

dependencies {
    implementation 'com.google.android.gms:play-services-base:17.1.0'
}

2. In MainActivity.java

import android.accounts.AccountManager;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.common.AccountPicker;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TAG = MainActivity.class.getSimpleName();
    private static final int REQUEST_CODE_PICK_ACCOUNT = 101;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.pick_email).setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.pick_email) {
            getUserAccounts();
        }
    }

    private void getUserAccounts() {
        Intent intent = AccountPicker.newChooseAccountIntent(null, null,
                null, false, null, null, null, null);
        startActivityForResult(intent, REQUEST_CODE_PICK_ACCOUNT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_PICK_ACCOUNT && data != null) {
            if (resultCode == RESULT_OK) {
                Log.i(TAG, "Account Type: " + data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE));
                Log.i(TAG, "Account Name: " + data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME));
            } else if (resultCode == RESULT_CANCELED) {
                Toast.makeText(this, "Cancelled. Please try again", Toast.LENGTH_LONG).show();
            }
        }
    }
}
In Logcat:
I/MainActivity: Account Type: com.google
I/MainActivity: Account Name: abcd@gmail.com

References:
https://stackoverflow.com/questions/22174259/pick-an-email-using-accountpicker-newchooseaccountintent
https://developers.google.com/android/reference/com/google/android/gms/common/AccountPicker

Leave a comment