我正在尝试仅提取可获得生日或周年纪念日信息的联系人。但是,我只找到了与电话号码联系的方式,但我的应用只需要提供生日/周年纪念信息的联系人,并按即将到来的生日顺序排序。
我在ListView
中显示结果。
我需要正确的查询来解决这个问题,我尝试使用谷歌搜索和stackoverflow但没有找到解决方案。
以下是我用来获取联系人信息的代码:
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String SORT_ORDER = ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY + " ASC ";
// Querying the table ContactsContract.Contacts to retrieve all the contacts
Cursor contactsCursor = getContentResolver().query(contactsUri,
null,
ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1",
null,
ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
if (contactsCursor.moveToFirst()) {
do {
long contactId = contactsCursor.getLong(contactsCursor.getColumnIndex("_ID"));
Uri dataUri = ContactsContract.Data.CONTENT_URI;
String[] projection1 ={
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Event.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DATA2,
ContactsContract.Contacts.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.DATA1,
ContactsContract.CommonDataKinds.Phone.DATA15
};
// Querying the table ContactsContract.Data to retrieve individual items like
// home phone, mobile phone, work email etc corresponding to each contact
String selection =
ContactsContract.Data.CONTACT_ID + "=" + contactId;
Cursor dataCursor = getContentResolver().query(
dataUri,
projection1, //projection
selection, //selection
null,
null);
////some code here
} while (dataCursor.moveToNext());
////some more code
// Adding id, display name, path to photo and other details to cursor
mMatrixCursor.addRow(new Object[]{Long.toString(contactId), displayName, photoPath, details});
}
} while (contactsCursor.moveToNext());
}
return mMatrixCursor;
}
我正确地获取了所有必需的信息并且没有任何问题,但是我正在努力寻找正确的查询以仅显示有生日的联系人并按正确顺序对其进行排序,因为生日并不总是以正确的格式存储。提前谢谢!