首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检索联系人可用的所有帐户?

如何检索联系人可用的所有帐户?
EN

Stack Overflow用户
提问于 2017-08-30 11:09:16
回答 1查看 265关注 0票数 0

我想以编程方式检索android /tablet上的所有帐户,这些帐户可以用于联系人、,而以前不知道存在帐户

我使用AccountManager检索所有帐户,但这也给了我其他帐户(例如电子邮件帐户)。

因此,我添加了AccountManager.hasFeatures()来选择唯一具有"service_contacts“功能的帐户,但通过这种方式,我只找到了Google,而没有找到其他帐户(例如,在我的手机上,我使用Davdroid帐户作为联系人,而我的程序不选择这个帐户)。

我哪里错了?我是否应该使用其他API?有人能建议我(也许用一些代码作为例子)一个实现目标的方法吗?

谢谢你的帮助

编辑:

对不起,我对英语不太了解,但我想我自己解释得很好。

我不想检索我已经知道的帐户,或者我已经知道的类型(getAccountsByType)。我想在电话上部署一个应用程序,这个应用程序我不知道,它可以拥有任何帐户(可能没有谷歌帐户)而没有任何以前的知识,并且只检索那些可以用于联系人的帐户(是在添加新的联系人时可以在联系人应用程序中选择的帐户)。

也许我错了,我对此请求原谅,但我不能把这看作是一个重复的问题,我无法理解如何用你的答案来解决我非常具体的问题。

再次感谢你的回答

解决方案:

我使用ContentResolver.getSyncAdapterTypes()来选择与ContentResolver.getSyncAdapterTypes相关的所有同步适配器,因此代码是(我使用EditText来显示):

代码语言:javascript
运行
复制
    private void getAccountsForContacts() {
    // Constants
    final String SYNC_AUTHORITY = "com.android.contacts";
    // Variables
    List<SyncAdapterType> okSyncs;
    SyncAdapterType[] mySyncTypes;
    AccountManager accountManager;
    Account[] tempAccounts;
    List<Account> allAccounts;
    String textAccounts;
    int i;
    int j;

    // Clear the text
    EditText editListAccounts = (EditText) findViewById(R.id.editListAccounts);
    editListAccounts.setText("");
    // Initialize all variables
    okSyncs = new ArrayList<SyncAdapterType>();
    allAccounts = new ArrayList<Account>();
    textAccounts = "";
    // Get all sync adapters
    mySyncTypes = ContentResolver.getSyncAdapterTypes();
    if (mySyncTypes.length > 0) {
        for (i = 0; i < mySyncTypes.length; i++) {
            // Select the only adapters for contacts
            if (mySyncTypes[i].authority.equals(SYNC_AUTHORITY)) {
                okSyncs.add(mySyncTypes[i]);
            }
        }
    }
    if (okSyncs.size() > 0) {
        accountManager = AccountManager.get(this);
        // From sync get all related accounts
        for (i = 0; i < okSyncs.size(); i++) {
            tempAccounts = accountManager.getAccountsByType(okSyncs.get(i).accountType);
            if (tempAccounts.length > 0) {
                for (j = 0; j < tempAccounts.length; j++) {
                    allAccounts.add(tempAccounts[j]);
                }
            }
        }
    }
    if (allAccounts.size() > 0) {
        for (i=0; i<allAccounts.size(); i++) {
            textAccounts += allAccounts.get(i).toString();
        }
    } else {
        textAccounts = getResources().getString(R.string.main_accounts_not_found);
    }
    editListAccounts.setText(textAccounts);
}

我希望它能对某人有用。

不管怎样,谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2017-08-30 11:16:54

我想这个可以帮助你自己解决这个问题,并以这种方式学习东西。

AccountManager.getAccountsByType(java.lang.String)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45958838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档