Android M电子邮件完成

因为您知道Android M的权限系统已更新。

我目前使用权限GET_ACCOUNTS来自动填充用户电子邮件时,他登录/注册我的应用程序。

final ArrayList<String> emails = new ArrayList<String>();
for (Account account : AccountManager.get(this).getAccounts()) {
    emails.add(account.name);
}
email.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, emails));

问题是,在Android M上,要继续使用此功能,我需要询问用户是否有权读取他的帐户。 这没有任何意义,因为为了节省用户一点时间,我需要使用恼人的权限请求。

还有另一种自动填充用户电子邮件的方式,而不需要任何许可?


Google Play Services 8.3添加了可用于自动填充电子邮件地址的提示信息

http://android-developers.blogspot.co.uk/2015/11/whats-new-in-google-play-services-83.html

为了让跨设备的登录更轻松,无论您使用Google登录还是仍然使用基于密码的身份验证,Smart Lock API都会收到一些重要更新。 我们添加了一种新的API方法来显示对话框,以帮助用户选择以前使用的电子邮件地址,以便轻松预填表单或登录表单:检出getHintPicker。 这不需要任何设备权限,并且可以替代先前从设备上的帐户填充的选择器,该选择器现在需要运行Marshmallow许可。

https://developers.google.com/identity/smartlock-passwords/android/retrieve-hints

HintRequest hintRequest = new HintRequest.Builder()
    .setHintPickerConfig(new CredentialPickerConfig.Builder()
            .setShowCancelButton(true)
            .build())
    .setEmailAddressIdentifierSupported(true)
    .build();

PendingIntent intent =
        Auth.CredentialsApi.getHintPickerIntent(mCredentialsClient, hintRequest);
try {
    startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
    Log.e(TAG, "Could not start hint picker Intent", e);
}

提示用户选择要使用的电子邮件地址。

然后,在活动的onActivityResult()方法中,从Credential.EXTRA_KEY包中检索提示,检查用户是否在用户数据库中,并使用凭证提示启动适当的活动。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_HINT) {
        if (resultCode == RESULT_OK) {
            Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            Intent intent;
            // Check for the user ID in your user database.
            if (userDatabaseContains(credential.getId())) {
                intent = new Intent(this, SignInActivity.class);
            } else {
                intent = new Intent(this, SignUpNewUserActivity.class);
            }
            intent.putExtra("com.mycompany.myapp.SIGNIN_HINTS", credential);
            startActivity(intent);
        } else {
            Log.e(TAG, "Hint Read: NOT OK");
            Toast.makeText(this, "Hint Read Failed", Toast.LENGTH_SHORT).show();
        }
    }

    ...

}

我已经为我的应用和凭证进行了测试.getId()包含您可以用来在选择后预先填写表单字段的电子邮件地址。 最后,我没有使用它,因为它只提供使用Google帐户的选项,但如果您只是想要一个电子邮件地址,它的效果非常好!

链接地址: http://www.djcxy.com/p/70163.html

上一篇: Android M email completition

下一篇: Uniquely identifying user or device in Cordova using least permissions