2

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

//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

4 回答 4

1

我有一个类似的问题。在我的设备上,我注意到:

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

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

希望这可以帮助!

于 2013-07-18T10:33:15.793 回答
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  ";

添加其他子句是因为内部 Android 库使用它们,这似乎是个好主意。但是直到我添加了“com.google”子句,我的重复组问题才消失。

于 2014-07-24T03:38:18.787 回答
0

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

  • 可以删除组
  • 组可以不可见(仅供内部使用)
  • 群组可以有不同的来源(电话联系人、不同的同步适配器 = Google 帐户或其他一般帐户)

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

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

来源可能根本不应该被过滤。我在我的设备上使用了多个 Google 帐户,最终有多个“已在 Android 中加注星标”和“我的联系人”组,这些组由 Google 同步适配器为不同的帐户同步。最好的解决方案可能是合并具有相同名称的组。用户通常不关心联系人/组是从哪个帐户同步的。

于 2016-05-11T17:52:01.140 回答
-1

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

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

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

ACCOUNT_TYPE- 也是错误的,因为我添加了我的组,它出现了两次 - 一个有com.google类型,另一个有,lg.sync但有些com.google组不是空的,有些lg.sync组也不是空的。

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

有趣的是,在 MotoG 第一代 Android 5.1 上,一切似乎都运行良好,没有重复的组。仅GROUP_VISIBLE效果不好,因为它根本不显示自定义组。

于 2016-05-25T20:07:03.117 回答