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?
- ¿Cómo descargar el archivo de Google Drive con Drive.API?
- API de Google Drive para Android (GDAA) getResourceId () devuelve null (problema de temporización)
- Después de desconectar la aplicación Google Drive Android API todavía devuelve resultados exitosos, pero no carga el archivo
- ¿Cómo usar el método setResultCallback?
- Dependencia ignorada debido al conflicto Android studio
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" />
- Hacer una copia local del archivo mediante Google Drive API
- ¿Los ámbitos de Google Drive están obsoletos?
- ¿Cómo puedo obligar a GoogleApiClient a activar la IU del selector de cuentas cada vez que llamo a conectar?
- Integración de Google Drive con la actividad actual
- Subir archivo de texto a Google Drive mediante Android
- Carga de vídeo a Google Drive mediante programación (API de Android)
- Cómo descargar el archivo de la unidad de google en android
- ¿Cómo puedo cambiar cuentas en la NUEVA API de Google Drive para Android?
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();
- ¿Dónde puedo descargar una versión anterior del SDK de Android?
- Obtenga la colección de nombres de parámetros de la url de Java / Android