Android 从设备读取生日会导致游标中出现重复条目

Android 从设备读取生日会导致游标中出现重复条目,android,android-contacts,android-cursor,Android,Android Contacts,Android Cursor,我正在读我所有联系人的生日。我的代码对大多数联系人都很好,但我对一些联系人有点小问题,因为它们在我的光标中出现了两次。就我的研究而言,当联系人(例如)手动存储在设备中并从skype导入联系人时,这种情况总是会发生。我还没有用其他导入的联系人(如facebook等)测试过它,但我想我会遇到同样的问题。以下是我目前的代码: String[] projection = new String[] { ContactsContract.Contacts._ID,

我正在读我所有联系人的生日。我的代码对大多数联系人都很好,但我对一些联系人有点小问题,因为它们在我的光标中出现了两次。就我的研究而言,当联系人(例如)手动存储在设备中并从skype导入联系人时,这种情况总是会发生。我还没有用其他导入的联系人(如facebook等)测试过它,但我想我会遇到同样的问题。以下是我目前的代码:

String[] projection = new String[] {  ContactsContract.Contacts._ID,
                                      ContactsContract.Contacts.DISPLAY_NAME,
                                      ContactsContract.CommonDataKinds.Event.START_DATE };

String selection =  ContactsContract.Data.MIMETYPE + "= ? AND " +
                    ContactsContract.CommonDataKinds.Event.TYPE + "= ? AND "+
                    ContactsContract.Contacts.IN_VISIBLE_GROUP + " = ?";

String[] selectionArgs = new String[] { ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE,
                                        Integer.toString(ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY),
                                        "1"};

ContentResolver cr = getContentResolver();
Cursor c = cr.query(ContactsContract.Data.CONTENT_URI, projection, selection, selectionArgs, null);

while (c.moveToNext()) {
  String id = c.getString(0);
  String name = c.getString(1);
  String bday = c.getString(2);
  Log.d(TAG, "id: " + id + ", name: " + name + ", bday: " + bday);
}  
当我运行此代码时,从Skype导入的联系人将在logcat中显示两次:

id: 251, name: Homer Simpson, bday: 1956-05-12
id: 502, name: Homer Simpson, bday: 12.05.1956
正如您所看到的,条目具有不同的ID,因此我无法通过_ID属性解决我的问题(这里有人建议:)。我在联系人名单上也只见过一次荷马·辛普森。完美的解决方案是只从skype获取生日信息,而我的设备中手动存储的联系人没有生日信息。我开始四处寻找解决方案,并使用LOOKUP_键找到了很多建议,但我在实现过程中遇到了困难,不确定这是否是解决问题的正确方法

有人知道如何解决这个问题吗?每一种方法都将受到赞赏!谢谢大家!