2

私は新しいGooglePlayサービスから始めて、ブログと参照されている例で見つけた情報を使用して、完全に機能するアプリを作成しようとしました。私見これらの例には何かが欠けています。

新しい標準のAccountPicker.newChooseAccountIntentを使用して、デバイスに登録されているGoogleアカウントを選択できます。そのダイアログを使用すると、返品時にアカウントの名前が返されます。

ここで、例はトークンを取得する方法を示しています。新しいGoogleAuthUtil.getTokenメソッドでは、トークンを取得するためにメールが必要です。

何か足りないものがあります。特定のアカウント名からメールを取得するにはどうすればよいですか?

よろしくお願いします。

public class MyActivity extends Activity {

    public static final String AUTHTOKENSCOPE_DRIVE = "oauth2:https://www.googleapis.com/auth/drive";

    String accountName = "";

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    accountName = intent.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                    // Need to fetch token with email
                    // String token = GoogleAuthUtil.getToken(this, <???email???>,  
                           AUTHTOKENSCOPE_DRIVE);
                } else {
                }

                break;
            default:
                super.onActivityResult(requestCode, resultCode, intent);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        int rc = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        switch (rc) {
            case ConnectionResult.SUCCESS:
                Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[] {
                        "com.google"
                },
                        true, null, AUTHTOKENSCOPE_DRIVE, new String[] {
                            "Just a text"
                        }, null);
                startActivityForResult(intent, 1);
                break;
        }
    }
}
4

1 に答える 1

6

Google アカウントの場合、メール アドレスアカウント名です。

したがって、これはあなたのために働くはずです:

String token = GoogleAuthUtil.getToken(this, accountName, AUTHTOKENSCOPE_DRIVE);

Accountこれに使用できるオブジェクトがあることを再確認するには、accountName呼び出すこともできます

GoogleAccountManager accountManager = new GoogleAccountManager(context);
Account account = accountManager.getAccountByName(accountName);

証明

すでに参照したブログ投稿から:

次に、android.accounts.Account オブジェクトは必要ありません。一意に識別する電子メール アドレス文字列 ( account.name で使用可能) を使用するだけです。

Android 用の Google のCalendar API サンプル アプリケーションから、GoogleAccountCredential.getAccountName()メソッドは次のようになります。

/**
 * Returns the selected Google account name (e-mail address), for example
 * {@code "johndoe@gmail.com"}, or {@code null} for none.
 */
public String getAccountName() {
    return accountName;
}

そこでは、次のものも使用します。

GoogleAuthUtil.getToken(context, accountName, scope);
于 2012-10-06T10:44:53.467 に答える