通过 Android 访问 Google 帐户 ID/用户名

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

122657 次浏览

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

第一个是这个: 如何检索安卓手机上登录的谷歌帐户?

它提供了检索与手机相关的帐户的代码:

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 级别的 android 设备,而不是 SDK 版本(就像通常做的那样)。

有一个来自谷歌的例子,它列出了现有的谷歌帐户,并生成一个访问令牌后选择,您可以发送该访问令牌到服务器检索相关的细节,从它来识别用户。

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

请通过 我的职位

获取 Google 用户名的方法:

 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 帐号:

 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" />
String name = android.os.Build.USER;


if (!TextUtils.isEmpty(name)) {
nameEdit.setText(name);
}
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
}

检索登录用户的配置文件信息 使用 GoogleSignInResult.getSignInAccount 方法请求当前签名用户的配置文件信息。 可以在登录意图成功后调用 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();

使用这些句子:

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

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