怀抱观古今,寝食展戏谑。这篇文章主要讲述很好地获取Android用户的电子邮件地址相关的知识,希望能为你提供帮助。
我想允许用户在没有输入的情况下向我提供他们的电子邮件地址。理想情况下,有一个文本字段,用户可以键入电子邮件地址或按下按钮自动填充它。
在之前的一个问题中,Roman Nurik suggests using an AccountManager要处理这个问题,但这需要我的应用程序使用GET_ACCOUNTS权限;
然后我的应用程序可以访问设备上的所有用户帐户,包括他们的Facebook / Twitter帐户。这个许可对我想要的东西来说似乎过于宽泛。
有没有更好的方法来处理这个不需要授予我的应用程序这么重的权限?
答案我知道我已经太晚了,但这可能对其他人有用。
我认为现在自动填充电子邮件字段的最佳方法是使用AccountPicker
如果您的应用具有GET_ACCOUNTS权限并且只有一个帐户,则可以立即获得。如果您的应用没有,或者有多个帐户,则用户会收到提示,以便他们可以授权或不授权操作。
您的应用需要包含Google Play Services,但它不需要任何权限。
整个过程将在旧版本的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);
}
}
另一答案【很好地获取Android用户的电子邮件地址】实际上,如果没有GET_ACCOUNTS,您不仅不能这样做,您想要的信息只存在于用户的(Google)帐户数据中。
在我的Sprint手机上,'所有者'地址sprint指定的是
myusername@sprintpcs.com
,可以从shell中使用getprop
看到。但这不是我的主要电子邮件地址,甚至是我曾经使用/检查过的地址。你想要的是我的Gmail地址,并存储在Android帐户数据中。实际上,你想要两个中的一个 - 这是你需要GET_ACCOUNTS的另一个原因。如果您要询问我的电子邮件地址,您需要让我在设备上配置的两个@ gmail.com帐户中进行选择。我知道哪一个是我的'首选'(虽然即使是上下文),但系统认为AFAIK不比另一个更“主要”或“默认”。
另一答案另一种方法可能是找到与设备关联的Google用户名,您可以从中重新构建
user@gmail.com
地址,但仍需要使用AccountManager。见Accessing Google Account Id /username via Android。另一答案没有要求GET_ACCOUNTS权限,没有很好的方法来访问用户的帐户(电子邮件)信息。 :-)
推荐阅读
- 从manifest android中删除额外的不需要的权限
- 'Android.Runtime.UncaughtExceptionHandler'的类型初始值设定项引发了异常
- 构建xamarin android项目不成功,错误XA4212
- Android Check Internet Connection Android 8.0
- 在Xamarin Forms Project中的OnAppearing方法中调用InitializeComponent
- 如何限制用户输入EditText(Xamarin.Android)中小数点分隔符后的最大2位或3位数()
- 使用Android Deep Link的UPI支付网关
- “android.runtime.JavaProxyThrowable”是什么意思(我该如何解决?)
- 如何在C中打印Pascal三角形