Android开发之针对联系人的封装

这篇攻略旨在介绍如何在 Android 应用中针对联系人进行封装。通过封装,开发人员可以避免在代码中反复地调用系统联系人 API,提高代码的可读性和维护性。

步骤一:创建 ContactManager 类

首先,我们需要创建一个名为 ContactManager 的类,该类将封装所有与联系人相关的代码。在类中,我们可以定义公共方法,如添加、更新、删除联系人,以及方法来获取联系人列表等。

public class ContactManager {

    public void addContact(String name, String phone, String email) {
        // 添加联系人的代码
    }

    public void updateContact(String name, String phone, String email) {
        // 更新联系人信息的代码
    }

    public void deleteContact(String name) {
        // 删除联系人的代码
    }

    public List<Contact> getContacts() {
        // 获取联系人列表的代码
        return null;
    }

    // 其他一些私有方法
}

步骤二:封装系统联系人 API

接下来,我们需要在 ContactManager 类中封装系统联系人 API。在此示例中,我们将使用 ContentResolver 对象来访问联系人数据。

public class ContactManager {

    private ContentResolver mContentResolver;

    public ContactManager(ContentResolver contentResolver) {
        mContentResolver = contentResolver;
    }

    // 添加联系人的代码
    public void addContact(String name, String phone, String email) {
        // 使用 ContentResolver 对象添加联系人
    }

    // 更新联系人信息的代码
    public void updateContact(String name, String phone, String email) {
        // 使用 ContentResolver 对象更新联系人信息
    }

    // 删除联系人的代码
    public void deleteContact(String name) {
        // 使用 ContentResolver 对象删除联系人
    }

    // 获取联系人列表的代码
    public List<Contact> getContacts() {
        // 使用 ContentResolver 对象获取联系人列表
        return null;
    }

    // 其他一些私有方法
}

步骤三:实现 Contact 类

我们还需要实现一个 Contact 类来表示联系人。Contact 类应该包含联系人的姓名、电话号码和电子邮件地址等属性。

public class Contact {

    private String mName;
    private String mPhone;
    private String mEmail;

    public Contact(String name, String phone, String email) {
        mName = name;
        mPhone = phone;
        mEmail = email;
    }

    public String getName() {
        return mName;
    }

    public String getPhone() {
        return mPhone;
    }

    public String getEmail() {
        return mEmail;
    }

    // 其他一些 setter 和 getter 方法
}

步骤四:使用 ContactManager 类

现在,我们已经创建了一个 ContactManager 类,可以使用它来管理联系人。以下是一些使用 ContactManager 类的示例。

ContactManager contactManager = new ContactManager(getContentResolver());

// 添加联系人
contactManager.addContact("张三", "13800138000", "zhangsan@example.com");

// 获取联系人列表
List<Contact> contacts = contactManager.getContacts();
for (Contact contact : contacts) {
    Log.d("ContactManager", "Name: " + contact.getName() +
            " Phone: " + contact.getPhone() +
            " Email: " + contact.getEmail());
}

// 删除联系人
contactManager.deleteContact("张三");

示例一:添加联系人

下面是一个添加联系人的示例。

public void addContact(String name, String phone, String email) {
    ContentValues values = new ContentValues();
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
    values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name);
    Uri dataUri = mContentResolver.insert(ContactsContract.Data.CONTENT_URI, values);

    values.clear();
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
    values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phone);
    values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
    values.put(ContactsContract.CommonDataKinds.Phone.LABEL, "手机");
    values.put(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID, ContentUris.parseId(dataUri));
    mContentResolver.insert(ContactsContract.Data.CONTENT_URI, values);

    values.clear();
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
    values.put(ContactsContract.CommonDataKinds.Email.DATA, email);
    values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
    values.put(ContactsContract.CommonDataKinds.Email.LABEL, "工作");
    values.put(ContactsContract.CommonDataKinds.Email.RAW_CONTACT_ID, ContentUris.parseId(dataUri));
    mContentResolver.insert(ContactsContract.Data.CONTENT_URI, values);
}

在这个示例中,我们使用了 ContentResolver 对象来访问联系人数据,并使用 ContentValues 对象来组织数据。我们首先添加联系人的姓名,接着添加电话号码和电子邮件地址等信息。最后,我们将所有信息插入到 ContactsContract.Data 表中。

示例二:获取联系人列表

下面是一个获取联系人列表的示例。

public List<Contact> getContacts() {
    List<Contact> contacts = new ArrayList<>();
    String[] projection = new String[] {
            ContactsContract.Data.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER,
            ContactsContract.CommonDataKinds.Email.DATA
    };
    String selection = ContactsContract.Data.MIMETYPE + " in (?, ?)";
    String[] selectionArgs = new String[] {
            ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE,
            ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE
    };
    Cursor cursor = mContentResolver.query(
            ContactsContract.Data.CONTENT_URI,
            projection,
            selection,
            selectionArgs,
            null
    );

    if (cursor != null) {
        while (cursor.moveToNext()) {
            String name = cursor.getString(
                    cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)
            );
            String phone = cursor.getString(
                    cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
            );
            String email = cursor.getString(
                    cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)
            );
            Contact contact = new Contact(name, phone, email);
            contacts.add(contact);
        }
        cursor.close();
    }
    return contacts;
}

在这个示例中,我们使用了 Cursor 对象来从 ContactsContract.Data 表中获取联系人列表,并使用 ContactsContract.CommonDataKinds 类来获取联系人的电话号码和电子邮件地址等信息。我们首先查询显示姓名、电话号码和电子邮件地址等信息的列,接着使用 SelectionArgs 参数来确定查询条件,最后使用 Cursor 对象获取查询结果,并将其转换为 Contact 对象的列表返回。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android开发之针对联系人的封装 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Python3.遍历某文件夹提取特定文件名的实例

    以下是 “Python3.遍历某文件夹提取特定文件名的实例” 的完整攻略: 1. 确认题意 此题需要我们编写一个 Python3 程序,能够遍历某个指定的文件夹,提取其中所有以特定文件名开头的文件,并将这些文件的路径输出到屏幕上。 2. 编写代码 我们可以使用 Python OS 模块中的 walk() 函数来遍历文件夹,使用 string 模块中的 sta…

    other 2023年6月26日
    00
  • 聊聊boost python3依赖安装问题

    接下来我将详细讲解“聊聊boost python3依赖安装问题”的完整攻略。 首先了解boost python3 Boost Python3 是将 C++ 库和 Python 解释器连接的一种工具。使用 Boost Python3 可以使得 C++ 来开发 Python 模块。在 boost.python 第一版中,一些 Python/C API 都封装成了…

    other 2023年6月26日
    00
  • python在if语句中相当于&&(逻辑与)

    在Python中,if语句中的条件表达式可以使用and运算符来实现逻辑与的效果,这与C语言中的&&运算符类似。以下是详细的攻略: 使用and运算符 在Python中,我们可以使用and运算符将两个条件表达式组合在一起,以实现逻辑的效果。当if语句中的条件表达式使用and运算符时,只有当所有条件都为True时,整个条件表达式才为True。以下是…

    other 2023年5月9日
    00
  • HTML5页面无缝闪开的问题及解决方案

    HTML5页面无缝闪开的问题是指页面在加载完成前,页面的元素先显示出来,之后再调整位置。这种体验会给用户带来不良的用户体验,因此需要解决。以下是解决方案: 1. 加载样式表前使用JS隐藏元素 在页面头部的 <head> 标签中加入以下代码: <style> .no-flash { display: none; } </style…

    other 2023年6月26日
    00
  • jupyter修改文件名方式(TensorFlow)

    Jupyter修改文件名方式(TensorFlow)的完整攻略 在Jupyter中,修改文件名常常是我们所需要的操作之一。修改TensorFlow文件名则具有一定难度,因此需要特殊的方法。本篇攻略将给出如何在Jupyter中修改TensorFlow文件名的具体操作。 步骤一:打开Jupyter 首先需要在本地环境中,打开Jupyter。可以通过Anacond…

    other 2023年6月26日
    00
  • javascript之es6

    JavaScript之ES6的完整攻略 ES6是JavaScript的一个重要版本,引入了许多新的语言特性和功能,使得JavaScript更加强大和易于使用。本文将介绍ES6的主要特性和功能,并提供两个示例说明,以帮您更好地了解应用这些技术。 ES6的主要特性和功能 let和const关键字 ES6引入了和const关键字,用于声明变量和常量。与var关键字…

    other 2023年5月7日
    00
  • Win11总是自动重启怎么办? Win11关机后自动开机的解决办法

    Win11总是自动重启怎么办?Win11关机后自动开机的解决办法 在使用Win11系统时,有时候会出现Win11总是自动重启的情况,或者关机后自动开机的情况,这些问题都很影响我们正常使用电脑。在这里,我们将为大家提供两种方法来解决这些问题。 方法一:关闭自动重启功能 步骤一:打开“设置” 在Win11桌面上,单击任务栏右下角的“通知中心”图标,点击“所有设置…

    other 2023年6月27日
    00
  • C语言初识变量常量字符串转义符及注释方式简介

    C语言初识变量常量字符串转义符及注释方式简介 变量和常量 在C语言中,我们可以定义变量来存储数据。变量就像一个盒子,可以存储不同类型的数据,包括整数,浮点数,字符等等。在C语言中,我们可以使用已经定义好的数据类型来定义变量。 // 定义一个整型变量a,并且给它赋值为10 int a = 10; // 定义一个浮点型变量b,并且给它赋值为3.14 float …

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部