如何在安卓设备上获取谷歌用户名?

19

我看到有人提到可以像通过Android访问Google帐户ID/用户名那样使用AccountManager。但是这似乎是为了获取authtoken?

我只需要访问用户名,不需要密码或任何授权令牌。

我正在使用android 2.1 sdk。如何在Android上获取google用户名?


2
请查看我的回答:https://dev59.com/ZnI95IYBdhLWcg3w3yFU - Roman Nurik
2个回答

46

正如评论中提到的那样,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;
}

2
只是想指出,如果用户有多个帐户,这种方法就行不通了,而且如果他们不使用GMail,也可能行不通。我曾经拥有过3个Google帐户,一个是我的个人帐户,一个是工作帐户,还有一个是当我激活手机时Google强制我注册的GMail帐户,但后来我通过桌面浏览器将其删除了。 - Chloe
@Chloe 如何选择一个谷歌账户并保存它? - Zyoo
我能够使用OAuth2发送邮件,但有时会出现问题。使用Gmail的令牌成功发送邮件后,如何获取确认通知,因为如果不能发送邮件,我就有发送短信的选项。 - Gnanam R
这个应用程序始终应该至少有一个帐户,以便所有谷歌应用程序都能正常工作。虽然安卓设备上可能存在极端情况,没有任何帐户,但请注意,出于多种原因,它可能不是一个gmail地址。 - Brill Pappin

0
在新的Android版本中,出于安全原因,您无法通过代码获取帐户:-
它需要提示用户,如果用户同意,才能继续进行。代码将如下所示:-
 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()
            ))
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接