很好地获取Android用户的电子邮件地址
我希望允许用户在不输入的情况下为我提供他们的电子邮件地址。理想情况下,会有一个文本字段,用户可以在其中键入电子邮件地址或按下按钮以自动填充该电子邮件地址。
在之前的问题中,Roman Nurik建议使用AccountManager来处理这个问题,但这需要我的应用程序使用GET_ACCOUNTS权限; 我的应用程序可以访问设备上的所有用户帐户,包括他们的Facebook / Twitter帐户。 对于我想要的,这个许可似乎太宽泛了。
有没有更好的方式来处理这个问题,并不需要授予我的应用程序这样的重任?
事实上,您不仅可以在没有GET_ACCOUNTS的情况下执行此操作,您只需要在用户(Google)帐户数据中存在您想要的信息。
在我的Sprint手机上,sprint所分配的“所有者”地址是myusername@sprintpcs.com
,可以通过使用shell中的getprop
来查看。 但那不是我的主要电子邮件地址,或者我曾经使用/检查过的地址。 您想要的是我的Gmail地址,并且存储在Android帐户数据中。
实际上,你需要两个之一 - 这是你需要GET_ACCOUNTS的另一个原因。 如果您要询问我的电子邮件地址,则需要让我在设备上配置的两个@ gmail.com帐户中进行选择。 我知道哪一个是我的'首选'(尽管这是上下文相关的),但AFAIK不被系统认为比另一个更'主要'或'默认'。
我知道我太迟了,但这可能对其他人有用。
我认为现在自动填充电子邮件字段的最好方法是使用AccountPicker
如果您的应用拥有GET_ACCOUNTS权限并且只有一个帐户,那么您马上就可以获得。 如果你的应用程序没有它,或者如果有多个帐户,用户会得到一个提示,以便他们可以授权或不授予该操作。
您的应用需要包含Google Play服务,但不需要任何权限。
整个过程在较旧版本的Android上将失败(需要2.2+),或者如果Google Play不可用,则应考虑此情况。
这是一个基本的代码示例:
private static final int REQUEST_CODE_EMAIL = 1;
private TextView 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(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {
String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
email.setText(accountName);
}
}
另一种方法可能是查找与设备关联的Google用户名,您可以从中重新构建user@gmail.com
地址,但仍需要使用AccountManager。 请参阅通过Android访问Google帐户ID /用户名。
上一篇: Getting Android owner's email address nicely
下一篇: How to find Gmail account associated with Android Market?