【问题标题】:Pick an email using AccountPicker.newChooseAccountIntent使用 AccountPicker.newChooseAccountIntent 选择电子邮件
【发布时间】:2014-04-06 02:58:49
【问题描述】:

我正在尝试让用户使用以下代码选择一个电子邮件帐户:

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"}

非常感谢

【问题讨论】:

    标签: android android-account accountpicker


    【解决方案1】:

    现在是 2019 年,代码似乎不再工作了。获取选择器中显示的所有帐户(使用 Xamarin Android),而不是

    Android.Gms.Common.AccountPicker.NewChooseAccountIntent(null, null, 
    null, false, null, null, null, null);
    

    你必须使用

    Android.Accounts.AccountManager.NewChooseAccountIntent(null,null,null,null,null,null,null)
    

    【讨论】:

    • 这个问题专门针对AccountPicker.newChooseAccountIntent()类/方法。
    • 你可能是对的......(为什么选择它作为答案?)
    【解决方案2】:

    在四处搜索之后,我终于下载了所有相关的应用程序(outlook、linkedin、twitter..)并使用以下代码转储了帐户类型:

    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
    • 领英:com.linkedin.android
    • 脸书:com.facebook.auth.login
    • 推特:com.twitter.android.auth.login
    • 使用的所有其他 Imap 电子邮件帐户 在 Android 邮件应用程序中:com.google.android.legacyimap(感谢 厄兹别克语)
    • 当然还有谷歌:com.google

    我仍然缺少雅虎帐户类型,导致雅虎邮件应用程序在我的设备上不断崩溃。

    因此希望各位有雅虎账号类型的请分享一下。

    2015 年 7 月 12 日修订版,提供更好的解决方案

    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);
        }
    }
    

    【讨论】:

      【解决方案3】:

      根据文档,第三个参数是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);
      

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

      请注意,AccountPicker 类是 Google Play 服务包的一部分,可以改用AccountManager.newChooseAccountIntent()(在 API 级别 14 中添加)并获得相同的结果。

      希望这会有所帮助。

      【讨论】:

      • 谢谢,很有帮助
      • 您为此使用了什么 gradle 依赖项?包含compile 'com.google.android.gms:play-services:9.0.2' 可能会导致 65k 限制。
      • @ShubhamA。抱歉,已经有一段时间了,我不记得了。如果您的最低 SDK 版本为 14+,您可以考虑改用 AccountManager.newChooseAccountIntent()
      • @ozbek 这调用了一个显示设备帐户列表的意图。但如果没有帐户存在,那么它会将我重定向到谷歌登录 Windows(首次启动帐户登录时出现)。我在 newCoolseAccoutnIntent 中没有看到任何参数。如何摆脱这种局面?
      • @xaif:请发布一个新问题并定义“如何摆脱这种情况?”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多