如何在Android手机上检索登录的Google帐户?

问题描述 投票:22回答:2

我正在开发Android应用程序,我需要检索手机上使用的Google帐户。我想为C2DM做这个,但我不想让用户输入他/她的谷歌电子邮件帐户,如果他们已经登录。有什么办法吗?

android accountmanager
2个回答
45
投票

这样的事情应该有效:

AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account[] list = manager.getAccounts();
String gmail = null;

for(Account account: list)
{
    if(account.type.equalsIgnoreCase("com.google"))
    {
        gmail = account.name;
        break;
    }
}

您需要在清单中获得以下权限:

<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>

如果您支持Android 6及更高版本的https://developer.android.com/training/permissions/requesting.html,请记住“在运行时请求权限”

我是从内存中写的,所以可能需要稍微调整一下。显然,现在可以在没有电子邮件地址的情况下进行注册,因此可以对数据进行一些重复处理以确保它实际上是一个电子邮件地址(确保它包含@gmail或@googlemail)


0
投票

我在下面的范围内尝试获取电子邮件地址和用户名

在您的手机中获取Google帐户

 public String getMailId() {
        String strGmail = null;
        try {
            Account[] accounts = AccountManager.get(this).getAccounts();
            Log.e("PIKLOG", "Size: " + accounts.length);
            for (Account account : accounts) {

                String possibleEmail = account.name;
                String type = account.type;

                if (type.equals("com.google")) {

                    strGmail = possibleEmail;
                    Log.e("PIKLOG", "Emails: " + strGmail);
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
             strGmail = null;
        }

        return strGmail;
    }

在您的手机中获取Google帐户用户名

 public String getUsername() {
    List<String> possibleEmails = null;
    try {
        AccountManager manager = AccountManager.get(this);
        Account[] accounts = manager.getAccountsByType("com.google");
        possibleEmails = new LinkedList<>();

        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);
        }
    } catch (Exception e) {
        e.printStackTrace();
        if (possibleEmails != null) {
            possibleEmails.clear();
        }
    }

    if (possibleEmails != null) {
        if (!possibleEmails.isEmpty() && possibleEmails.get(0) != null) {
            String email = possibleEmails.get(0);
            String[] parts = email.split("@");
            if (parts.length > 0 && parts[0] != null) {
                return parts[0];

            } else {
                return null;
            }
        } else {
            return null;
        }
    } else {
        return null;
    }
}

声明对清单文件的权限。

  <uses-permission android:name="android.permission.GET_ACCOUNTS" />
© www.soinside.com 2019 - 2024. All rights reserved.