Получите имя учетной записи / адрес электронной почты из Google Drive Android API

Я использую новый Google Drive Android API, могу подключиться и сделать все, что он позволяет мне делать, но для того, чтобы используйте SpreadsheetService, мне нужно извлечь accountName / email от вошедшего в систему пользователя.

Как мне это сделать?

Вот код, в котором я подключаю API Google Диска. Работает нормально.

private void connect() {

    if (isGooglePlayServicesAvailable()) {
        if (mGoogleApiClient == null) {
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addApi(Drive.API)
                    .addScope(Drive.SCOPE_FILE)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .build();
        }
        // And, connect!

        if (!mGoogleApiClient.isConnecting() && !mGoogleApiClient.isConnected()) {
            mGoogleApiClient.connect();
            writeLog("Connecting...");
        }

    }
}

Здесь я использую SpreadsheetService API, но мне нужно имя учетной записи, чтобы получить токен.

String accountName = "???"; // how do I get this From GoogleClientApi / mGoogleApiClient ?
String accessToken = GoogleAuthUtil.getTokenWithNotification(GDriveActivity.this, accountName, scope, null);
SpreadsheetService service = new SpreadsheetService("v1");

Я пробовал это добавить:

String accountName = Plus.AccountApi.getAccountName(mGoogleApiClient);

... в методе onConnected, но он выдает NullPointerException.

Кроме того, вот мои разрешения:

<uses-permission
    android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission
    android:name="android.permission.VIBRATE" />
<uses-permission
    android:name="android.permission.INTERNET" />
<uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
    android:name="android.permission.GET_ACCOUNTS" />
<uses-permission
    android:name="android.permission.NETWORK" />
<uses-permission
    android:name="android.permission.USE_CREDENTIALS" />

person LimaNightHawk    schedule 04.04.2014    source источник


Ответы (2)


Вам необходимо добавить:

                    .addApi(Plus.API)

при построении клиента. Тогда это будет работать в onConnected(Bundle):

String accountName = Plus.AccountApi.getAccountName(mGoogleApiClient);

предполагая, что у вас уже есть правильное разрешение (что у вас есть):

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
person Mark    schedule 07.04.2014
comment
Возможно ли это без Plus API? Только с помощью com.google.android.gms: play-services-identity? - person Roel; 24.07.2015
comment
Плюс устарел. - person Jaydev; 16.05.2017

Теперь я вернулся к нижеприведенному, что позволяет мне получить учетную запись в любое время.

Когда я задал этот вопрос, у меня создалось впечатление, что я могу получить его только при первоначальном подключении. Очевидно, я был неправ.

private String getAccountName() {

    String accountName = null;

    AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
    Account[] list = manager.getAccounts();
    for (Account account : list) {
        if (account.type.equalsIgnoreCase("com.google")) {
            accountName = account.name;
            break;
        }
    }
    return accountName;
}

Конечно, включая следующее разрешение в AndroidManifest:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
person LimaNightHawk    schedule 14.10.2014
comment
Что делать, если у вас несколько учетных записей Google? Затем вы просто автоматически выбираете первый. - person Roel; 24.07.2015
comment
Я согласен с Роэлом, что, если у вас несколько учетных записей? Это единственная тема, которую я нашел по той же проблеме, с которой я столкнулся. Мне нужен адрес электронной почты пользователя, зарегистрированного на Google Диске. У нас уже есть реальное решение? - person Lucas Eduardo; 12.08.2016
comment
@LucasEduardo Вы нашли какое-нибудь решение? - person osayilgan; 14.04.2017
comment
Как бы то ни было, сейчас я использую Google EasyPermissions. Это дает пользователю всплывающее окно, чтобы выбрать, какую учетную запись он хочет использовать. developers.google.com/sheets/api/quickstart/android - person LimaNightHawk; 14.04.2017
comment
Ох, я использую всплывающее окно, чтобы спросить пользователя, какую учетную запись он хочет выбрать, как сказал LimaNightHawk выше. - person Lucas Eduardo; 26.10.2017