如何获得Android的主电子邮件地址(或电子邮件地址列表)?
据我所知,OS 2.0+支持多个电子邮件地址,但在2.0以下,每台设备只能有一个电子邮件地址。
如何获得Android的主电子邮件地址(或电子邮件地址列表)?
据我所知,OS 2.0+支持多个电子邮件地址,但在2.0以下,每台设备只能有一个电子邮件地址。
当前回答
这可能对其他人有用:
使用AccountPicker在没有任何全局权限的情况下获取用户的电子邮件地址,并允许用户知道并授权或取消该过程。
其他回答
建议的答案将不再有效,因为从android 8开始有新的限制。
更多信息请访问:https://developer.android.com/about/versions/oreo/android-8.0-changes.html#aaad
这在Android中是相当棘手的事情,我还没有做过。但也许这些链接可以帮助你:
Android Issue 1073:谷歌认证令牌应该可以通过API访问第三方应用程序 android 2.x+中的SDK API AccountManager
可悲的是,接受的答案并不管用。
我迟到了,但这是内部Android电子邮件应用程序的解决方案,除非内容uri由提供商更改:
Uri EMAIL_ACCOUNTS_DATABASE_CONTENT_URI =
Uri.parse("content://com.android.email.provider/account");
public ArrayList<String> GET_EMAIL_ADDRESSES ()
{
ArrayList<String> names = new ArrayList<String>();
ContentResolver cr = m_context.getContentResolver();
Cursor cursor = cr.query(EMAIL_ACCOUNTS_DATABASE_CONTENT_URI ,null,
null, null, null);
if (cursor == null) {
Log.e("TEST", "Cannot access email accounts database");
return null;
}
if (cursor.getCount() <= 0) {
Log.e("TEST", "No accounts");
return null;
}
while (cursor.moveToNext()) {
names.add(cursor.getString(cursor.getColumnIndex("emailAddress")));
Log.i("TEST", cursor.getString(cursor.getColumnIndex("emailAddress")));
}
return names;
}
使用这个方法:
public String getUserEmail() {
AccountManager manager = AccountManager.get(App.getInstance());
Account[] accounts = manager.getAccountsByType("com.google");
List<String> possibleEmails = new LinkedList<>();
for (Account account : accounts) {
possibleEmails.add(account.name);
}
if (!possibleEmails.isEmpty() && possibleEmails.get(0) != null) {
return possibleEmails.get(0);
}
return "";
}
注意,这需要GET_ACCOUNTS权限:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
然后:
editTextEmailAddress.setText(getUserEmail());
有一个Android api,允许用户选择他们的电子邮件地址,而不需要许可。来看看:https://developers.google.com/identity/smartlock-passwords/android/retrieve-hints
HintRequest hintRequest = new HintRequest.Builder()
.setHintPickerConfig(new CredentialPickerConfig.Builder()
.setShowCancelButton(true)
.build())
.setEmailAddressIdentifierSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE)
.build();
PendingIntent intent = mCredentialsClient.getHintPickerIntent(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()中传递