谷歌游戏服务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;
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();
}
}
...
}
我已经为我的应用程序进行了测试,credential.getId() 包含您可以在选择后用于预填表单字段的电子邮件地址。最终我没有使用它,因为它只提供使用 Google 帐户的选项,但是如果您只想要一个电子邮件地址,它非常有效!