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

问题描述:

我取使用下面的查询所有的联络小组:重复的条目时联系人组的Android 4+

//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帐户同步。

组在联系人应用中正确列出。

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

  • 每对重复的组,一组总是包含0触点(ContactsContract.Groups.SUMMARY_COUNT)和
  • 与> 0联系人的所有联系人组有一个非空ContactsContract.Groups.NOTES列。

它仍然不是很清楚,我为什么返回空的群体,但我已经通过选择非空的团体,或有非空列票据围绕它得到。

希望这会有所帮助!

+0

谢谢,我会试试 – Mirko 2013-07-18 10:57:07

+0

没问题。祝你好运! – Keith 2013-07-18 11:07:16

我发现所有这些空的重复组都具有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使用它们,似乎是个好主意。但是,我添加“com.google”条款之前,重复组的问题并未消失。

这是一个老问题,但因为还是有没有正确的答案在这里的地雷:

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

前两个可以很容易地使用:

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

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

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

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

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

ACCOUNT_TYPE - 也是假的,因为我加入我的团队,并出现两次 - 一个与com.google类型,而另一个与lg.sync但一些com.google组是非空的,有些lg.sync组也没有空。

看起来只有可靠的查询联系人组的方式是选择非空组。如果你的要求是显示空组,除了两者都显示外,你不能做任何事情。

Intertingly,在MotoG 1st gen Android 5.1上一切似乎都正常,没有重复的组。只有GROUP_VISIBLE工程不好,因为它根本不显示自定义组。