通过Android访问Google帐户ID /用户名
如何在代码中访问用户的Google帐户ID /用户名? 我正在构build一个将调用Web服务来存储数据的应用程序,并且要确定提交数据的人员的身份。
我遇到了同样的问题,这两个链接解决了我:
第一个是这个: 我如何检索Android手机上login的Google帐户?
其中介绍了检索与手机关联的帐户的代码。 基本上你会需要这样的东西:
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模拟器 – 创build用户帐户时遇到问题
基本上,它说,你必须创build一个基于API级别的Android设备,而不是SDK版本(通常是这样做的)。
此方法获取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 ID ::
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" />
检索login用户的个人资料信息使用GoogleSignInResult.getSignInAccount方法请求当前login用户的个人资料信息。 login意图成功后,您可以调用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();
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 }
有一个来自google的示例,它列出了现有的Google帐户,并在select时生成一个访问令牌,您可以将该访问令牌发送到服务器以从中检索相关详细信息以识别用户。
您还可以从访问令牌获取电子邮件ID,因为您需要修改SCOPE
请通过我的post
String name = android.os.Build.USER; if (!TextUtils.isEmpty(name)) { nameEdit.setText(name); }