Как получить имя и фамилию учетной записи Google, в которую я вошел, в Android?

У меня есть простое приложение с аутентификацией Google, и я хочу показать приветственное сообщение. Если адрес электронной почты: johnsmith@gmail.com, я хочу Toast с "Добро пожаловать, Джон Смит!" Как я могу это сделать?

Это мой код:

if (user == null) {
        startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().build(), SIGN_IN_REQUEST_CODE);
    } else {
        Toast.makeText(MainActivity.this, "Welcome " + userName, Toast.LENGTH_SHORT).show();
    }

Я пытался использовать этот код, но я получаю только имя пользователя, а не имя и фамилию.

AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account[] list = manager.getAccounts();

Заранее спасибо!

2 ответа

Решение

onActivityResult:

public void onActivityResult(int requestCode, int resultCode, Intent result) {
    if (requestCode == GOOGLE_REQUEST_CODE) { // Google + callback
       handleSignInResult(Auth.GoogleSignInApi.getSignInResultFromIntent(result));
       }
}

handleSignInResult:

private void handleSignInResult(GoogleSignInResult googleSignInResult) {
    if (googleSignInResult.isSuccess()) {
        GoogleSignInAccount acct = googleSignInResult.getSignInAccount();
        if (acct != null) {
            //get the data you need from GoogleSignInAccount
            }
        } else {
            Toast.makeText(context.getApplicationContext(), "error", Toast.LENGTH_SHORT).show();
        }
    }

Вы можете найти больше на GoogleSignInAccount: https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInAccount

Хорошо, отредактированный ответ -

Cursor c = activity.getContentResolver().query(ContactsContract.Profile.CONTENT_URI, null, null, null, null);
int count = c.getCount();
String[] columnNames = c.getColumnNames();
boolean b = c.moveToFirst();
int position = c.getPosition();
if (count == 1 && position == 0) {
for (int j = 0; j < columnNames.length; j++) {
    String columnName = columnNames[j];
    String columnValue = c.getString(c.getColumnIndex(columnName)));
    ...
    //Use the values
    }
}
c.close();

j = 0 представляет DISPLAY_NAME.

Но это доступно только от ICS. Добавьте разрешение READ_PROFILE и READ_CONTACTS в свой AndroidManifest.

Другие вопросы по тегам