Intereting Posts
LibGDX ScrollPane, показывающий черный экран Как применить одиночный фон для группы и ребенка в expandablelistview ПредпочтениеФрагмент с прозрачным фоном? Android Wear Пользовательские голосовые действия Есть ли рекомендуемая стратегия для выпуска бета-версии приложения для ограниченного числа пользователей через Android Market? Извлечение метаданных из видеофайлов на Android Тестирование устройств Android – проблемы с разрешением и проверкой Установить полный экран на страницеСтать Android: Как использовать greenDao для загрузки данных async? Намерение и связывание Отключить прокрутку до новой вкладки в Google Chrome для Android Android с намерением открыть фрагмент из активности Диалоговое окно предупреждения в android не должно отклоняться Можно ли отправлять Push Notification со стороны сервера Java автоматически 3-го месяца между датой начала и датой окончания для каждого другого пользователя? LocationServices.SettingsApi Сбросить SETTINGS_CHANGE_UNAVAILABLE flag

Получить имя учетной записи / электронную почту от Google Диска Android API

Я использую новый API Android для Google Диска, и я могу подключиться и сделать все, что он позволит мне сделать , но для использования 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..."); } } } 

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

 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 , но он 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" /> 

Solutions Collecting From Web of "Получить имя учетной записи / электронную почту от Google Диска Android API"

Вам нужно добавить:

  .addApi(Plus.API) 

При создании клиента. Затем это будет работать в onConnected(Bundle) :

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

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

 <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

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

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

 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" /> 

Вы можете получить различные данные от Plus.PeopleApi

 protected static GoogleApiClient mGoogleApiClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN) .addApi(Games.API).addScope(Games.SCOPE_GAMES) .build(); } @Override public void onConnected(Bundle bundle) { String data = Plus.API.getName() + "\n" + Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getName() + "\n" + Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getId() + "\n" + Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getAboutMe() + "\n" + Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getBirthday() + "\n" + Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getBraggingRights() + "\n" + Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getCurrentLocation() + "\n" + Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getNickname() + "\n" + Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getDisplayName() + "\n" + Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getTagline(); Toast.makeText(this, data, Toast.LENGTH_LONG).show();