Android 仅对列出了电子邮件的联系人获取光标 >android 2.0

标签 android contacts android-cursor

我有以下代码可以从 content provider 获取联系人

String[] columns = new String[] {
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.Contacts._ID,
                ContactsContract.Contacts.PHOTO_ID };
        Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI,
                columns, null, null, null);

我用这个通过他们的 id 获取特定联系人的电子邮件:

Cursor emails = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                    null,
                    ContactsContract.CommonDataKinds.Email.CONTACT_ID
                            + " = " + contact.getContactId(), null, null);

我当前的实现传递游标中的每一行并获取其电子邮件并将它们存储在 java 对象的数组列表中。

我想知道是否可以只查询内容提供者并返回一个游标,其中包含列出了电子邮件地址的 ids/name 等联系人。

这种方式获取联系人列表的等待时间较长。我将此列表用于列表适配器。如果我只能获得有电子邮件的联系人,我可以在我的列表中使用游标适配器。

这样的事情可能吗?我怎样才能加快这个过程?

最佳答案

@CapDroid

修复了 DArkO 帖子中的工作代码:

    ContentResolver cr = context.getContentResolver();
    String[] PROJECTION = new String[] { ContactsContract.RawContacts._ID, 
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.Contacts.PHOTO_ID,
            ContactsContract.CommonDataKinds.Email.DATA, 
            ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
    String order = "CASE WHEN " 
            + ContactsContract.Contacts.DISPLAY_NAME 
            + " NOT LIKE '%@%' THEN 1 ELSE 2 END, " 
            + ContactsContract.Contacts.DISPLAY_NAME 
            + ", " 
            + ContactsContract.CommonDataKinds.Email.DATA
            + " COLLATE NOCASE";
    String filter = ContactsContract.CommonDataKinds.Email.DATA + " NOT LIKE ''";
    Cursor cur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, PROJECTION, filter, null, order);

您的光标将具有基本 ID 以及姓名和电子邮件地址。此代码的性能非常好,因为它只请求很少的列。

关于Android 仅对列出了电子邮件的联系人获取光标 >android 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205999/

相关文章:

android - 在 WebView 中隐藏滚动条

ios - 从iOS版本6.1.3的通讯录数据库中获取联系人时发生崩溃?

iphone - 如何从iPhone操作系统中检索提供商的电子邮件联系人?

android - EditText,如何控制TextWatcher中的光标?

Android:将列添加到已填充的游标

android - "Optimizing"在Android中访问游标 : Position vs Column names

Android ListAdapter 来自数组列表

android - Android 中的 play-services-base 与 -basement 依赖关系 (AAR)

jquery - android浏览器手机网页模态窗口

android - 在 contactList 中检测新的联系人添加