我开始使用新的 Google Play 服务并尝试使用我在 blog 中找到的信息并在引用示例中创建一个完整的工作应用程序。恕我直言,这些示例中缺少一些东西。
新标准 AccountPicker.newChooseAccountIntent 可用于选择在设备上注册的 Google 帐户。使用该对话框在返回时返回帐户名称。
现在示例显示如何获取 token 。新的 GoogleAuthUtil.getToken 方法需要一封电子邮件来获取 token 。
有些东西不见了。如何从给定的帐户名获取电子邮件?
非常感谢。
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;
}
}
}
最佳答案
对于 Google 帐户,电子邮件地址是帐户名。
所以这应该适合你:
String token = GoogleAuthUtil.getToken(this, accountName, AUTHTOKENSCOPE_DRIVE);
要重新检查,有一个 Account
对象可用于此 accountName
您也可以调用
GoogleAccountManager accountManager = new GoogleAccountManager(context);
Account account = accountManager.getAccountByName(accountName);
证明
来自blog post你已经提到了:
Second, you don’t need an android.accounts.Account object, you just use the email-address string (available in account.name) that uniquely identifies it.
来自谷歌的Calendar API sample application for Android , 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);
关于android - newChooseAccountIntent 返回一个名称,但 getToken 需要一个电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12758101/