如何检索Android手机上login的Google帐户?

我正在开发一个Android应用程序,我需要检索手机上使用的Google帐户。 我想为C2DM做这件事,但是如果他们已经login,我不想让用户input他/她的Google电子邮件帐户。有没有办法做到这一点?

Solutions Collecting From Web of "如何检索Android手机上login的Google帐户?"

像这样的东西应该工作:

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> 

我从记忆中写下来,所以可能需要稍微调整一下。 显然现在可以在没有电子邮件地址的情况下进行注册,所以也许可以对数据进行一些重新计算以确保它实际上是一个电子邮件地址(确保它包含@gmail或@googlemail)

我已经尝试下面的范围来获取电子邮件地址用户名

通过手机获取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" />