6

Sto utilizzando il nuovo Google Drive Android API e posso connettermi e fare all that it will allow me to do, ma per poter utilizzare SpreadsheetService, ho bisogno di estrarre l'accountName/email dall'utente registrato .Ottieni nome account/email dall'API Android di Google Drive

Come faccio?

Ecco il codice in cui collego l'API di Google Drive. Funziona bene.

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

    } 
} 

Ecco dove sto utilizzando l'API SpreadsheetService, ma ho bisogno il nome dell'account per ottenere il 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"); 

Ho provato questo l'aggiunta di questo:

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

... nel metodo onConnected, ma getta una NullPointerException.

Inoltre, qui sono i miei permesso:

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

Si prega di dare una lettura https: // sviluppatori .google.com/+/mobile/android/people – Raghuram

risposta

5

Ora ho ritornato al di sotto del quale mi permette di ottenere il conto alla in qualsiasi momento

Quando ho fatto questa domanda avevo l'impressione che potessi averlo solo quando inizialmente mi collego. Ovviamente non ero corretto.

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

Naturalmente, tra cui la seguente autorizzazione nella AndroidManifest:

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

Cosa succede se hai più account Google? Quindi devi solo selezionare automaticamente il primo. – Roel

+1

Sono d'accordo con Roel, cosa succede se hai più account? Questo è l'unico argomento che ho trovato per lo stesso problema che sto affrontando. Ho bisogno che Google Drive abbia registrato l'email dell'utente. Abbiamo già una soluzione reale? –

+0

@ LucasEduardo hai trovato una soluzione? – osayilgan

13

è necessario aggiungere:

    .addApi(Plus.API) 

quando si costruisce il cliente. Allora questo funzionerà in onConnected(Bundle):

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

supponendo che si dispone già l'autorizzazione corretta (che si fa):

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

Sì, funziona ... –

+5

È possibile senza l'API Plus? Solo utilizzando com.google.android.gms: play-services-identity? – Roel

+0

Plus è ora deprecato. – Jaydev

0

È possibile ottenere vari dati da 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(); 
+1

Plus è obsoleto – Jaydev