很好地获取Android所有者的电子邮件地址

android permissions 匿名 | 2020-02-27 02:24:39


我想允许用户提供他们的电子邮件地址,而不必键入它。理想情况下,会有一个文本字段,用户可以在其中键入电子邮件地址或按下按钮自动填充它。
在前面的问题中,Roman Nurik建议使用AccountManager来处理此问题,但这需要我的应用程序使用“获取帐户”权限;然后,我的应用程序可以访问设备上用户的所有帐户,包括他们的Facebook/Twitter账户。这个权限对我来说似乎太宽泛了。
有没有更好的方法来处理这个问题,而不需要授予我的应用如此繁重的权限?





2 答案



我知道我已经太晚了,但这可能对其他人有用。
我认为现在自动填充电子邮件字段的最佳方法是使用AccountPicker
如果你的应用程序具有“获取帐户”权限,并且只有一个帐户,则你可以立即获取它。如果你的应用没有权限,或者有多个帐户,用户会得到一个提示,以便他们可以授权或不授权操作。
你的应用需要包括Google Play Services auth library
com.google.android.gms:play-services-auth
但不需要任何权限。
整个过程在较旧版本的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);
}
}

2020-02-27 02:24:47
匿名


事实上,如果没有GET_帐户,你不仅无法做到这一点,而且你想要的信息只存在于用户(Google)的帐户数据中。
在我的Sprint手机上,Sprint分配的“所有者”地址是
myusername@sprintpcs.com
,这可以通过shell中的
getprop
看到。但那不是我的主要电子邮件地址,甚至不是我曾经使用/检查过的。你想要的是我的gmail地址,它存储在Android账户数据中。
事实上,你想要这两个地址中的一个,这也是你需要获得账户的另一个原因。如果您要询问我的电子邮件地址,您需要让我在设备上配置的两个@gmail.com帐户中进行选择。我知道哪一个是我的“首选”之一(尽管这是上下文),但系统认为两者都不是比另一个更“主要”或“默认”。

2020-02-27 02:24:59
匿名


World is powered by solitude
备案号:湘ICP备19012068号