Android 联系人 API 入门指南

在 Android 开发中,我们经常需要访问用户的联系人信息。幸运的是,Android 提供了一个强大的联系人 API,允许我们以编程方式访问和管理联系人数据。本文将介绍如何使用 Android 联系人 API,并提供一些代码示例。

准备工作

在开始之前,请确保你的 Android 项目已经添加了必要的权限。你需要在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

访问联系人

要访问联系人,我们首先需要获取 ContentResolver 对象,然后使用它来查询联系人数据。以下是一个简单的示例,展示如何获取所有联系人的姓名和电话号码:

ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

if (cursor != null) {
    while (cursor.moveToNext()) {
        String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        String phoneNumber = null;

            // 获取联系人的电话号码
            if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                Cursor phoneCursor = contentResolver.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                        new String[]{cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))},
                        null);
                if (phoneCursor != null) {
                    while (phoneCursor.moveToNext()) {
                        phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    }
                    phoneCursor.close();
                }
            }

        Log.d("Contacts", "Name: " + name + ", Phone: " + phoneNumber);
    }
    cursor.close();
}

添加联系人

除了访问联系人,我们还可以使用联系人 API 添加新的联系人。以下是一个示例,展示如何添加一个新联系人:

ContentValues values = new ContentValues();
values.put(ContactsContract.Contacts.DISPLAY_NAME, "John Doe");
values.put(ContactsContract.Contacts.HAS_PHONE_NUMBER, 1);

Uri contactUri = contentResolver.insert(ContactsContract.Contacts.CONTENT_URI, values);
if (contactUri != null) {
    long contactId = Long.parseLong(contactUri.getLastPathSegment());

    values.clear();
    values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "1234567890");
    values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
    values.put(ContactsContract.CommonDataKinds.Phone.CONTACT_ID, contactId);

    contentResolver.insert(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, values);
}

甘特图

以下是使用 Mermaid 语法创建的甘特图,展示联系人 API 的主要步骤:

gantt
    title 联系人 API 步骤
    dateFormat  YYYY-MM-DD
    section 访问联系人
    查询联系人数据    :done,    des1, 2023-01-01, 3d
    获取联系人姓名和电话号码    :active,  des2, after des1, 2d
    section 添加联系人
    创建新联系人    :         des3, after des2, 1d
    添加电话号码    :         des4, after des3, 1d

类图

以下是使用 Mermaid 语法创建的类图,展示联系人 API 中的主要类和它们之间的关系:

classDiagram
    class ContentResolver {
        +query(uri, projection, selection, selectionArgs, sortOrder)
        +insert(uri, values)
    }
    class ContactsContract {
        +Contacts
        +CommonDataKinds
    }
    class Contacts {
        +CONTENT_URI
        +DISPLAY_NAME
        +HAS_PHONE_NUMBER
    }
    class CommonDataKinds {
        +Phone
        +NUMBER
        +TYPE
        +TYPE_MOBILE
    }
    ContentResolver -- ContactsContract
    ContactsContract : contains Contacts
    ContactsContract : contains CommonDataKinds

结语

通过本文,我们了解了如何使用 Android 联系人 API 访问和添加联系人。这只是一个简单的入门指南,Android 联系人 API 还有很多高级功能等待我们去探索。希望本文能帮助你快速上手 Android 联系人 API 开发。