Obtener el nombre / correo electrónico de la cuenta de la API de Google Drive para Android

Estoy utilizando la nueva API de Google Drive para Android y puedo conectarme y hacer todo lo que me permita hacer , pero para poder utilizar el SpreadsheetService, necesito extraer el nombre de cuenta / correo electrónico del usuario registrado.

¿Cómo puedo hacer eso?

Aquí está el código en el que conecto la API de Google Drive. Funciona bien.

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..."); } } } 

Aquí es donde estoy usando la API de SpreadsheetService, pero necesito el nombre de la cuenta para obtener el token .

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

He intentado esto agregando esto:

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

… en el método onConnected , pero lanza una excepción NullPointerException .

También, aquí están mis permisos:

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

Usted necesita agregar:

  .addApi(Plus.API) 

Cuando se construye el cliente. Entonces esto funcionará en onConnected(Bundle) :

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

Suponiendo que ya tienes el permiso correcto (lo que haces):

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

Ahora he vuelto a lo siguiente que me permite obtener la cuenta en cualquier momento.

Cuando hice esta pregunta, tenía la impresión de que sólo podía conseguirla al conectarme inicialmente. Obviamente estaba equivocado.

 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; } 

Por supuesto, incluyendo el siguiente permiso en el AndroidManifest:

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

Puede obtener varios datos de 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(); 
  • ¿Cómo compartir el archivo de Google Drive desde la aplicación de Android?
  • Bucle Infinito "Elija una cuenta" al utilizar Google Drive API
  • Error getGoogleAppId con estado: 10 KitKat para Android: GCM y Google Drive
  • Cómo desvincular una aplicación de la cuenta de unidad de google
  • No se puede crear un archivo dentro de una carpeta pública en Google Drive
  • Error de ConnectionRequire de la API de Google Drive para Android
  • Bloqueado en bucle de conexión fallida con GoogleApiClient
  • Iniciar sesión en Google Drive en Android sin agregar la cuenta de Google al dispositivo
  • ¿Cómo subir un archivo db a Google Drive desde la aplicación Android?
  • Creación de una carpeta dentro de una carpeta en google drive android
  • Cómo borrar cuentas y credenciales predeterminadas de GoogleApiClient
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.