我使用以下查询获取所有联系人组:
//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 :(得分:1)
我遇到了类似的问题。在我的设备上,我注意到:
ContactsContract.Groups.SUMMARY_COUNT
)和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)
这是一个老问题,但由于我的答案仍然没有正确答案:
前两个可以使用以下方法轻松过滤:
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
效果不佳,因为它根本不会显示自定义组。