我想允许用户向我提供他们的电子邮件地址,无需键入它。理想情况下,会是一个文本字段,用户既可以键入电子邮件地址或按下按钮,自动填充它。
在前面的问题, 罗马Nurik建议使用的AccountManager来处理这个问题,但需要我的应用程序使用GET_ACCOUNTS特权; 然后我的应用程序可以访问该用户的所有帐户的设备,包括他们的Facebook / Twitter账户上。 该权限似乎是我想要的方式过于宽泛。
是否有处理这种不需要给予我的应用程序,例如重型权限的更好的方式?
我想允许用户向我提供他们的电子邮件地址,无需键入它。理想情况下,会是一个文本字段,用户既可以键入电子邮件地址或按下按钮,自动填充它。
在前面的问题, 罗马Nurik建议使用的AccountManager来处理这个问题,但需要我的应用程序使用GET_ACCOUNTS特权; 然后我的应用程序可以访问该用户的所有帐户的设备,包括他们的Facebook / Twitter账户上。 该权限似乎是我想要的方式过于宽泛。
是否有处理这种不需要给予我的应用程序,例如重型权限的更好的方式?
我知道我这样为时已晚,但是这可能是有用的人。
我觉得到现在为止自动填充电子邮件领域的最佳方法是使用AccountPicker
如果您的应用程序有GET_ACCOUNTS许可,只有一个账户,你得到它的时候了。 如果您的应用程序没有它,或者有一个以上的帐户,用户收到一个提示,这样他们就可以授权或不动作。
您的应用需要包括谷歌播放服务 ,但它并不需要任何权限。
这整个过程将无法在旧版本的Android(2.2+是必需的),或者如果谷歌播放不适用,因此你应该考虑这种情况。
这是一个基本的代码示例:
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);
}
}
事实上,不仅你不能做到这一点没有GET_ACCOUNTS,你想要的信息只有在用户的(谷歌)帐户数据的存在。
在我的Sprint电话,“主人”地址分配冲刺是myusername@sprintpcs.com
,并且可以使用被看作getprop
从shell。 但是,这不是我的主电子邮件地址,甚至是一个我曾经使用/检查。 你想要的是我的Gmail地址,而这存储在Android的帐户数据。
其实,你想这两个中的一个 -这是你需要GET_ACCOUNTS另一个原因。 如果你要问我的电子邮件地址,你需要让我中选择两个@ gmail.com帐户我已在设备上配置。 我知道哪一个是我的“优选”一个(虽然连这上下文),但据我所知没有被系统认为比较“初级”或“默认”比其他。
另一种方法可能是发现与设备,从中可以重建相关的谷歌用户名user@gmail.com
地址,但仍然需要使用AccountManager的。 请参阅使用Android访问谷歌账号/用户名 。
有没有要求对GET_ACCOUNTS权限访问用户的帐户(电子邮件)的信息没有很好的方式。 :-)