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