79

您如何在代码中访问用户的 Google 帐户 ID/用户名?我正在构建一个应用程序,它将调用 Web 服务来存储数据,并且我想识别提交数据的人的身份。

4

7 回答 7

47

我遇到了同样的问题,这两个链接为我解决了:

第一个是这个:如何在安卓手机上找回登录的谷歌账户?

其中显示了用于检索与手机关联的帐户的代码。基本上你需要这样的东西:

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

并在 AndroidManifest.xml 中添加权限

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

此外,如果您使用的是模拟器,以下链接将帮助您使用帐户进行设置:Android 模拟器 - 无法创建用户帐户

基本上,它说您必须基于 API 级别而不是 SDK 版本创建一个 android 设备(就像通常所做的那样)。

于 2011-09-10T14:04:09.043 回答
10

此方法获取谷歌用户名:

 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 > 0 && parts[0] != null)
            return parts[0];
        else
            return null;
    } else
        return null;
}

简单的这个方法调用....

并在 Gmail id 中获取 Google 用户::

 accounts = AccountManager.get(this).getAccounts();
    Log.e("", "Size: " + accounts.length);
    for (Account account : accounts) {

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

        if (type.equals("com.google")) {
            strGmail = possibleEmail;

            Log.e("", "Emails: " + strGmail);
            break;
        }
    }

在清单中添加权限后;

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

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
于 2014-08-11T10:34:32.080 回答
6

检索登录用户的个人资料信息 使用 GoogleSignInResult.getSignInAccount 方法请求当前登录用户的个人资料信息。您可以在登录 Intent 成功后调用 getSignInAccount 方法。

GoogleSignInResult result = 
Auth.GoogleSignInApi.getSignInResultFromIntent(data);
GoogleSignInAccount acct = result.getSignInAccount();
String personName = acct.getDisplayName();
String personGivenName = acct.getGivenName();
String personFamilyName = acct.getFamilyName();
String personEmail = acct.getEmail();
String personId = acct.getId();
Uri personPhoto = acct.getPhotoUrl();
于 2017-05-09T11:33:44.640 回答
2
if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
  Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
  String userid=currentPerson.getId(); //BY THIS CODE YOU CAN GET CURRENT LOGIN USER ID
}
于 2015-09-16T05:38:46.207 回答
2

使用了这些行:

AccountManager manager = AccountManager.get(this);
Account[] accounts = manager.getAccountsByType("com.google");

数组帐户的长度始终为 0。

于 2018-04-09T14:33:32.267 回答
0

google 有一个示例,其中列出了现有的 google 帐户并在选择时生成访问令牌,您可以将该访问令牌发送到服务器以从中检索相关详细信息以识别用户。

您还可以从访问令牌中获取电子邮件 ID,为此您需要修改 SCOPE

请浏览我的帖子

于 2013-04-23T15:02:34.477 回答
-4
String name = android.os.Build.USER;

if (!TextUtils.isEmpty(name)) {
    nameEdit.setText(name);
}
于 2015-04-22T14:14:09.147 回答