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,就可以直接遍历所有项目.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...