>我有以下代码获取与我的手机同步的所有Gmail ID,但我想要用户第一次注册的主Gmail ID。因为所有其他 gmail 帐户(不是主帐户)如果我想我可以随时删除,但要删除主帐户,我们还必须做其他事情,所以这就是为什么我想让主帐户用于我的应用程序。
这是我的代码,我认为在其中添加一些过滤器,我可以做到这一点,但无法正确获取内容。
Account[] accounts=AccountManager.get(this).getAccountsByType("com.google");
for(Account account: accounts)
{
String possibleEmail=account.name;
Log.d("Possible email id's of user", possibleEmail);
}
我已经看到了罗马链接,但无法以正确的方式转换它。我想使用此主电子邮件 ID 通过谷歌的 C2DM 推送通知。
我有一个答案,但这不是一个正确的方法。当我获得与google(gmail)关联的所有帐户时,并且当我们输入要与gmail同步的电子邮件ID时,将创建一个堆栈,并且在第0位,我获得了用户在打开手机时首次输入的主要Gmail ID。
Account[] accounts=AccountManager.get(this).getAccountsByType("com.google");
String myEmailid=accounts[0].toString();
Log.d("My email id that i want", myEmailid);
for(Account account: accounts)
{
String possibleEmail=account.toString();
Log.d("Possible email id of user", possibleEmail);
}
如果有人有更好的解决方案,请告诉我,我在 2 部手机上测试了此示例并且工作正常,但我看到许多应用程序正在获取用户的主要电子邮件 ID 以发送电子邮件,我想知道他们过得怎么样?
如果您找到多个您要查找的类型的帐户,则可能应该让用户选择。Android 3 没有"主帐户"的区别;您可以从设备中删除任何帐户,无论它是否是添加的第一个帐户。
以下代码获取电子邮件地址,不需要任何GET_ACCOUNTS权限。
private static final int REQUEST_CODE_EMAIL = 1;
email = (TextView) findViewById(R.id.email);
...
try {
Intent intent = AccountPicker.newChooseAccountIntent(null, null,
new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE }, false, null, null, null, null);
startActivityForResult(intent, REQUEST_CODE_EMAIL);
} catch (ActivityNotFoundException e) {
// TODO
}
...
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {
String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
email.setText(accountName);
}
}