7

私は新しいGoogle Drive Android APIを使用しており、接続して、できることはすべて実行できますが、SpreadsheetService を使用するには、サインインしているユーザーから accountName/email を抽出する必要があります。

それ、どうやったら出来るの?

これは、Google Drive API を接続するコードです。それは正常に動作します。

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

    }
}

ここでは SpreadsheetService API を使用していますが、トークンを取得するにはアカウント名が必要です。

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メソッド内ですが、 . をスローし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" />
4

2 に答える 2

14

以下を追加する必要があります。

                    .addApi(Plus.API)

クライアントを構築するとき。次に、これは次のように機能しonConnected(Bundle)ます。

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

すでに正しい権限を持っていると仮定します(そうします):

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
于 2014-04-07T05:01:18.300 に答える
4

いつでもアカウントを取得できるように、以下に戻りました。

この質問をしたとき、最初に接続したときにしか取得できないという印象を受けました。明らかに私は間違っていました。

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" />
于 2014-10-14T15:31:08.303 に答える