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

Android联系人查询

我在查询电话簿联系人时遇到问题.我需要做的是获取同时输入电话和电子邮件或特定类型的联系人列表.

基本上是这样的:

public static final String SELECTION =
    "("+ContactsContract.Contacts.HAS_PHONE_NUMBER +"='1') OR " + RawContacts.ACCOUNT_TYPE + "='" + Constants.ACCOUNT_TYPE + "'";

现在的问题是,我与查询一起使用的ContactsContract.Contacts.CONTENT_URI中不存在RawContacts.ACCOUNT_TYPE.我猜我需要加入另一个表,但是不知道如何去做.

有人可以帮我吗?

最佳答案
读取原始联系人及其所有相关数据的最佳方法是使用ContactsContract.RawContacts.Entity目录.如果原始联系人具有数据行,则实体光标将为每个数据行包含一行.如果原始联系人没有数据行,则光标仍将包含一行包含原始联系人级别信息的行.

Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI,rawContactId);
 Uri entityUri = Uri.withAppendedpath(rawContactUri,Entity.CONTENT_DIRECTORY);
 Cursor c = getContentResolver().query(entityUri,new String[]{RawContacts.soURCE_ID,Entity.DATA_ID,Entity.MIMETYPE,Entity.DATA1},null,null);
 try {
     while (c.movetoNext()) {
         String sourceId = c.getString(0);
         if (!c.isNull(1)) {
             String mimeType = c.getString(2);
             String data = c.getString(3);
             //decide here based on mimeType,see comment later
         }
     }
 } finally {
     c.close();
 }

您将必须根据mimeType过滤结果

例如,如果mimeType为Phone.CONTENT_ITEM_TYPE,则DATA1列存储电话号码,但如果数据类型为Email.CONTENT_ITEM_TYPE,则DATA1存储电子邮件地址.

这样,您将不必直接使用HAS_PHONE_NUMBER,就可以直接遍历所有项目.

原文地址:https://www.jb51.cc/android/531521.html

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

相关推荐