我看到有人提到可以像通过Android访问Google帐户ID/用户名那样使用AccountManager
。但是这似乎是为了获取authtoken
?
我只需要访问用户名,不需要密码或任何授权令牌。
我正在使用android 2.1 sdk。如何在Android上获取google用户名?
我看到有人提到可以像通过Android访问Google帐户ID/用户名那样使用AccountManager
。但是这似乎是为了获取authtoken
?
我只需要访问用户名,不需要密码或任何授权令牌。
我正在使用android 2.1 sdk。如何在Android上获取google用户名?
正如评论中提到的那样,Roman在如何获取Android设备的主要电子邮件地址问题的回答中解决了这个问题。这是我使用的代码,它还可以从电子邮件中剥离出用户名。
public String getUsername() {
AccountManager manager = AccountManager.get(this);
Account[] accounts = manager.getAccountsByType("com.google");
List<String> possibleEmails = new LinkedList<String>();
for (Account account : accounts) {
// TODO: Check possibleEmail against an email regex or treat
// account.name as an email address only for certain account.type values.
possibleEmails.add(account.name);
}
if (!possibleEmails.isEmpty() && possibleEmails.get(0) != null) {
String email = possibleEmails.get(0);
String[] parts = email.split("@");
if (parts.length > 1)
return parts[0];
}
return null;
}
private val chooseAccount = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result: ActivityResult ->
result.apply {
if (resultCode == RESULT_OK) {
Timber.d("resultCode ==RESULT_OK")
Timber.d(data?.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE))
Timber.d(data?.getStringExtra(AccountManager.KEY_ACCOUNT_NAME))
} else if (resultCode == RESULT_CANCELED) {
Timber.d("resultCode ==RESULT_CANCELED")
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
//Note: setAllowableAccountsTypes you can change it as per your need
chooseAccount.launch(
AccountPicker.newChooseAccountIntent(
AccountPicker.AccountChooserOptions.Builder()
.setAllowableAccountsTypes(listOf(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE))
.setAlwaysShowAccountPicker(true)
.build()
))
}