获取联系人组Android 4+时重复条目

时间:2013-04-29 15:35:00

标签: android android-contacts

我使用以下查询获取所有联系人组:

//get list of contact groups from ContactsContract
    Cursor groups_cursor = getContentResolver()//
            .query(ContactsContract.Groups.CONTENT_SUMMARY_URI,//
                    new String[] { //
                    ContactsContract.Groups._ID,//
                            ContactsContract.Groups.TITLE, //
                            ContactsContract.Groups.DATA_SET,//
                            ContactsContract.Groups.GROUP_VISIBLE,//
                            ContactsContract.Groups.DELETED,//
                            ContactsContract.Groups.SYSTEM_ID,//
                            ContactsContract.Groups.SUMMARY_COUNT, //
                            ContactsContract.Groups.SUMMARY_WITH_PHONES //
                    },//
                    null, null, null);//

我的光标总是包含两次“家庭”,“朋友”和“同事”组。

为什么我会得到这些副本?

我同步了一个Google帐户。

群组在“通讯录”应用中正确列出。

4 个答案:

答案 0 :(得分:1)

我遇到了类似的问题。在我的设备上,我注意到:

  • 对于每对重复组,一个组始终包含0个联系人(ContactsContract.Groups.SUMMARY_COUNT)和
  • 所有与>的联系人群组0个联系人具有非空ContactsContract.Groups.NOTES列。

我仍然不清楚为什么返回空组,但我通过选择非空组或具有非空注释列的组来解决它。

希望这有帮助!

答案 1 :(得分:1)

我发现所有这些空的重复组都有ACCOUNT_TYPE =" DeviceOnly",而合法群组有ACCOUNT_TYPE =" com.google"。所以如果你把它作为一个参数加上你应该是好的!

这是我的选择陈述

    private static final String CONTACT_GROUP_SELECTION = ContactsContract.Groups.AUTO_ADD + " = 0 "
        + " AND " + ContactsContract.Groups.ACCOUNT_TYPE + " = 'com.google' "
        + " AND " + ContactsContract.Groups.ACCOUNT_NAME + " NOT NULL  "
        + " AND " + ContactsContract.Groups.FAVORITES + " = 0 "
        + " AND " + ContactsContract.Groups.DELETED + " = 0  ";

添加了其他条款是因为internal Android library使用了它们,这似乎是一个好主意。但是我的重复组问题并没有消失,直到我添加了#34; com.google"子句。

答案 2 :(得分:0)

这是一个老问题,但由于我的答案仍然没有正确答案:

  • 可以删除群组
  • 群组可以隐藏(仅供内部使用)
  • 群组可以有不同的来源(手机通讯录,不同的同步适配器= Google帐户或其他一般帐户)

前两个可以使用以下方法轻松过滤:

ContactsContract.Groups.DELETED + " = 0 AND " +
ContactsContract.Groups.GROUP_VISIBLE + " = 1";

根本不应该过滤原产地。我在我的设备上使用了多个Google帐户,并最终拥有多个“已加入星号的Android”和“我的联系人”群组,这些群组已由Google同步适配器同步,用于不同的帐户。 最好的解决方案可能是合并具有相同名称的组。用户通常不关心联系人/群组同步的帐户。

答案 3 :(得分:-1)

我遇到了同样的问题(在LG G4上的Android 5.1上)并且所有答案都是错误的。

GROUP_VISIBLE = '1'不会返回“联系人”应用程序中可见的所有组。

NOTES也没有提供任何可靠的信息,因为所有小组都有一些注意事项。

ACCOUNT_TYPE - 也是假的,因为我添加了我的论坛,它出现了两次 - 一次使用com.google类型,另一位使用lg.sync,但部分com.google组非空,一些lg.sync组也不是空的。

查询联系人组的唯一可靠方法是选择非空组。如果您的要求是显示空组,除了同时显示两者外,您无能为力。

令人信服的是,在MotoG 1st gen Android 5.1上,一切似乎都运行良好,没有重复的组。只有GROUP_VISIBLE效果不佳,因为它根本不会显示自定义组。