入门安卓所有者的电子邮件地址好听入门安卓所有者的电子邮件地址好听(Getting Android o

2019-05-13 09:27发布

我想允许用户向我提供他们的电子邮件地址,无需键入它。理想情况下,会是一个文本字段,用户既可以键入电子邮件地址或按下按钮,自动填充它。

在前面的问题, 罗马Nurik建议使用的AccountManager来处理这个问题,但需要我的应用程序使用GET_ACCOUNTS特权; 然后我的应用程序可以访问该用户的所有帐户的设备,包括他们的Facebook / Twitter账户上。 该权限似乎是我想要的方式过于宽泛。

是否有处理这种不需要给予我的应用程序,例如重型权限的更好的方式?

Answer 1:

我知道我这样为时已晚,但是这可能是有用的人。

我觉得到现在为止自动填充电子邮件领域的最佳方法是使用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);
        }
    }


Answer 2:

事实上,不仅你不能做到这一点没有GET_ACCOUNTS,你想要的信息只有在用户的(谷歌)帐户数据的存在。

在我的Sprint电话,“主人”地址分配冲刺是myusername@sprintpcs.com ,并且可以使用被看作getprop从shell。 但是,这不是我的主电子邮件地址,甚至是一个我曾经使用/检查。 你想要的是我的Gmail地址,而这存储在Android的帐户数据。

其实,你想两个中的一个 -这是你需要GET_ACCOUNTS另一个原因。 如果你要问我的电子邮件地址,你需要让我中选择两个@ gmail.com帐户我已在设备上配置。 知道哪一个是我的“优选”一个(虽然连这上下文),但据我所知没有被系统认为比较“初级”或“默认”比其他。



Answer 3:

另一种方法可能是发现与设备,从中可以重建相关的谷歌用户名user@gmail.com地址,但仍然需要使用AccountManager的。 请参阅使用Android访问谷歌账号/用户名 。



Answer 4:

有没有要求对GET_ACCOUNTS权限访问用户的帐户(电子邮件)的信息没有很好的方式。 :-)



文章来源: Getting Android owner's email address nicely