问题描述
我使用以下代码检索联系人的所有事件:
Uri uri = ContactsContract.Data.CONTENT_URI;
ContentResolver cr = context.getContentResolver();
String[] projection = new String[]{
ContactsContract.Contacts.disPLAY_NAME,ContactsContract.CommonDataKinds.Event.CONTACT_ID,ContactsContract.CommonDataKinds.Event.START_DATE,ContactsContract.CommonDataKinds.Event.TYPE,ContactsContract.CommonDataKinds.Event.DATA3};
String where = ContactsContract.Data.MIMETYPE + "= ? AND "
+ ContactsContract.CommonDataKinds.Event.TYPE + "="
+ ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY + " OR "
+ ContactsContract.CommonDataKinds.Event.TYPE + "="
+ ContactsContract.CommonDataKinds.Event.TYPE_OTHER + " OR "
+ ContactsContract.CommonDataKinds.Event.TYPE + "="
+ ContactsContract.CommonDataKinds.Event.TYPE_CUSTOM;
String[] selectionArgs = new String[]
{ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE};
问题是联系人的电话号码被列为 Event.START_DATE 和 TYPE_OTHER。
有没有办法排除它们而只获取真实事件?
解决方法
我认为您应该在 where
子句中添加澄清括号,因为它现在可能包括具有非事件 mimetypes(例如 CommonDataKinds.Phone
)的行,只要它们具有 TYPE = CUSTOM。>
试试这个:
String where = Data.MIMETYPE + "= ? AND "
+ "("
+ Event.TYPE + "="
+ Event.TYPE_ANNIVERSARY + " OR "
+ Event.TYPE + "="
+ Event.TYPE_OTHER + " OR "
+ Event.TYPE + "="
+ Event.TYPE_CUSTOM
+ ")";
String[] selectionArgs = new String[]
{Event.CONTENT_ITEM_TYPE};