android - 给定电子邮件地址查询 Android 联系人的快速高效方法

标签 android email contacts

我正在寻找一种快速高效的方法来查询给定电子邮件地址的 Android 联系人(基本上,给定一个电子邮件地址,我想找到匹配的联系人(如果存在)。目前我有一个双 While 循环,它可能是完成此任务的最低效的方法。

我想我必须执行自定义 SQLite 连接查询,但我不熟悉如何执行此操作。来自其他用户的任何帮助或指点将不胜感激!

最佳答案

有一种方法可以在不查询第二个游标的情况下获取所需的详细信息。由于 ContentProvider 知道如何连接表,因此您也可以使用投影参数从连接表中请求列。

所以代码可能是这样的:

Cursor cursor = null;
try {
    //Filter by email address first.
    final String[] projection = new String[] { 
                ContactsContract.CommonDataKinds.Email.CONTACT_ID, 
                ContactsContract.CommonDataKinds.Email.DATA,
                ContactsContract.CommonDataKinds.Email.DISPLAY_NAME_PRIMARY,
                ContactsContract.CommonDataKinds.Email.IS_PRIMARY };

    final String selection = ContactsContract.CommonDataKinds.Email.DATA + "=? and "
                + ContactsContract.CommonDataKinds.Email.IS_PRIMARY+"=1";

    final String[] selectionArgs = new String[] { email };

    cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, projection, selection, selectionArgs, null);

    if (cursor.moveToFirst()) {
        long contactId = cursor.getLong(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID));
        String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DISPLAY_NAME_PRIMARY));

        // Do something with contactId and displayName
    }
} finally {
    if (cursor!=null) cursor.close();
}

所以 DISPLAY_NAME_PRIMARY 是一个由 ContentProvider 自动加入的列。不使用 IS_PRIMARY 来确保我们获得主要联系人原始数据而不是所有数据。

关于android - 给定电子邮件地址查询 Android 联系人的快速高效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11455608/

相关文章:

android - Android 项目的 Jira 工作流程

html - 外壳脚本 : Send html formatted email while inside an array

php - 如何判断一个邮箱地址是不是教育邮箱?

android - 无法从 hashmap 的数组列表中删除重复元素

android - 添加联系人应该添加哪个权限?

android - mpandroidchart - 如何避免 Y 轴中的重复值?

java - 为什么我无法将NavigationOnClickListener 设置为工具栏?

android - 在URL上获取位图图像

javascript - 在网站上保存电子邮件地址

php - 在php中从outlook csv导入联系人