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

我正在开发一个Android应用程序,我需要检索手机上使用的Google帐户。 我想为C2DM做这件事,但是如果他们已经login,我不想让用户input他/她的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" />