使用AccountPicker.newChooseAccountIntent选择一封电子邮件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (249)

我试图让用户使用以下代码选择电子邮件帐户:

Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"},
                            false, null, null, null, null);
                    startActivityForResult(intent, 23);

此代码很好用,但如果用户没有Gmail帐户但Yahoo,Hotmail等。我如何通过更改第三个参数显示所有电子邮件帐户:

new String[]{"com.google"}
提问于
用户回答回答于

根据文档,第三个参数是allowableAccountTypes

allowableAccountTypes 一个可选的帐户类型的字符串数组。这些用于过滤显示的帐户并过滤添加帐户时显示的帐户类型列表。

对于电子邮件应用中的IMAP帐户,该类型正在返回"com.google.android.legacyimap" (请勿在生产中记录帐户的详细信息)

AccountManager accountManager = AccountManager.get(getApplicationContext());
Account[] accounts = accountManager.getAccountsByType(null);
for (Account account : accounts) {
    Log.d(TAG, "account: " + account.name + " : " + account.type);
}

这是使用(将所有需要的帐户类型添加到数组)

Intent intent = AccountPicker.newChooseAccountIntent(null, null,
        new String[] {"com.google", "com.google.android.legacyimap"},
        false, null, null, null, null);

在我的设备上返回以下内容:

用户回答回答于

使用以下代码转储帐户类型:

public void pickUserAccount() {
    /*This will list all available accounts on device without any filtering*/
    Intent intent = AccountPicker.newChooseAccountIntent(null, null,
            null, false, null, null, null, null);   
    startActivityForResult(intent, REQUEST_CODE_PICK_ACCOUNT);
}
/*After manually selecting every app related account, I got its Account type using the code below*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_PICK_ACCOUNT) {
        // Receiving a result from the AccountPicker
        if (resultCode == RESULT_OK) {
            System.out.println(data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE));
            System.out.println(data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME));
        } else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this, R.string.pick_account, Toast.LENGTH_LONG).show();
        }
    }
}

这是我得到的以下结果:

  • Outlook(Hotmail,Live):com.outlook.Z7.eas
  • LinkedIn: com.linkedin.android
  • Facebook的: com.facebook.auth.login
  • com.twitter.android.auth.login
  • Android Mail应用程序中使用的每个其他Imap电子邮件帐户:( com.google.android.legacyimap感谢Ozbek)

更好的解决方案

Pattern emailPattern = Patterns.EMAIL_ADDRESS;
Account[] accounts = AccountManager.get(getActivity()).getAccounts();
ArrayList<String> emails = new ArrayList<String>();
for (Account account : accounts) {
    if (emailPattern.matcher(account.name).matches()) {
         emails.add(account.name);
    }
}

所属标签

可能回答问题的人

  • 人生的旅途

    10 粉丝484 提问6 回答
  • 不吃貓的鱼oo

    5 粉丝466 提问6 回答
  • 富有想象力的人

    4 粉丝0 提问5 回答
  • Richel

    8 粉丝0 提问4 回答

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励