微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ContactsContract.CommonDataKinds.Event.START_DATE 包括联系电话号码

如何解决ContactsContract.CommonDataKinds.Event.START_DATE 包括联系电话号码

我使用以下代码检索联系人的所有事件:

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};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。