6

Ich benutze die neue Google Drive Android API und ich kann verbinden, und tun all that it will allow me to do, aber um den SpreadsheetService zu verwenden, muss ich den AccountName/E-Mail von dem angemeldeten Benutzer extrahieren .Kontoname/E-Mail von Google Drive Android API

Wie mache ich das?

Hier ist der Code, wo ich die Google Drive API verbinde. Es funktioniert gut.

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

    } 
} 

Hier ist, wo ich die SpreadsheetService API bin mit, aber ich brauche die Kontonamen das Token zu bekommen.

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

Ich habe dies versucht, dies fügt hinzu:

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

... im onConnected Verfahren, aber es wirft einen NullPointerException.

Auch hier sind meine Berechtigungen:

<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

bitte eine Lesung https geben: // Entwickler .google.com/+/mobile/android/people – Raghuram

Antwort

5

Ich habe jetzt auf die unter dem zurück ermöglicht es mir, um das Konto zu bekommen, Jederzeit.

Als ich diese Frage stellte, hatte ich den Eindruck, dass ich es nur beim ersten Verbinden bekommen konnte. Offensichtlich war ich falsch.

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

Natürlich, einschließlich der folgenden Berechtigung in der AndroidManifest:

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

Was ist, wenn Sie mehrere Google-Konten haben? Dann wählst du einfach automatisch den ersten aus. – Roel

+1

Ich stimme Roel zu, was ist, wenn Sie mehrere Konten haben? Dies ist das einzige Thema, das ich für genau das gleiche Problem gefunden habe. Ich benötige die von Google Drive geloggte Benutzer-E-Mail. Haben wir schon eine echte Lösung? –

+0

@LucasEduardo hast du eine Lösung gefunden? – osayilgan

13

Sie müssen hinzufügen:

    .addApi(Plus.API) 

, wenn der Client-Aufbau. Dann wird dies in onConnected(Bundle) arbeiten:

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

vorausgesetzt, Sie bereits die richtige Berechtigung haben (was Sie tun):

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

Ja, es funktioniert ... –

+5

Ist das ohne die Plus-API möglich? Nur mit com.google.android.gms: play-services-identity? – Roel

+0

Plus ist jetzt veraltet. – Jaydev

0

Sie verschiedene Daten aus Plus.PeopleApi bekommen

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 ist veraltet – Jaydev