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

yizhihongxing

这篇攻略旨在介绍如何在 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日

相关文章

  • window下用taskkill杀死进程

    window下用taskkill杀死进程 在Windows系统下,有时候我们需要杀死某个进程来解决问题。Windows系统自带了用于杀死进程的命令行工具taskkill。本文将介绍如何使用taskkill命令杀死进程。 taskkill命令介绍 taskkill是Windows系统自带的命令行工具,用于杀死进程。taskkill命令的语法如下: taskki…

    其他 2023年3月28日
    00
  • linux模糊查找文件用什么命令比较好

    想要查找文件时,Linux系统的命令非常丰富。有时候,我们想查找文件时,只知道一部分文件名,不知道完整的文件名或者路径,这时候就需要使用模糊查找的方式。下面介绍几个常用的模糊查找文件的命令。 1.使用 find 命令配合 -name 选项查找文件 find 命令可用于在 Linux 文件系统中查找文件和目录。我们可以使用 -name 选项进行文件名的模糊匹配…

    other 2023年6月26日
    00
  • 使用jconsole监听远程Tomcat服务的方法

    使用jconsole监听远程Tomcat服务的方法可以通过以下步骤完成: 1. 开启JMX远程连接 在Tomcat的catalina.bat或catalina.sh中添加以下参数,开启JMX远程连接功能: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=<port n…

    other 2023年6月27日
    00
  • 【前端基础】动态脚本与JSONP

    前端基础:动态脚本与JSONP的完整攻略 动态脚本和JSONP是前端开发中常用的两种技术,用于实现跨域请求和动态加载脚本。本文将为您提供一份完整攻略,包括概念介绍、示例说明等。 动态脚本 动态脚本是一种在页面加载过程中动态加载脚本的技术。它可以通过创建script元素并将其添加到DOM中来实现。动态脚本通常用于加载第三方脚本、跨域请求等场景。 示例1:动态加…

    other 2023年5月5日
    00
  • Bootstrap菜单按钮及导航实例解析

    Bootstrap菜单按钮及导航实例解析 导航栏基本结构 Bootstrap提供了一套简洁、灵活且易于定制化的导航栏组件,以提供导航功能和菜单展示。下面是导航栏的基本HTML结构: <nav class="navbar navbar-expand-md navbar-dark bg-dark"> <a class=&qu…

    other 2023年6月28日
    00
  • Android App隐私合规检测辅助工具Camille详解

    以下是使用标准的Markdown格式文本,详细讲解Android App隐私合规检测辅助工具Camille的完整攻略: Android App隐私合规检测辅助工具Camille详解 什么是Camille? Camille是一款用于辅助Android开发者进行隐私合规检测的工具。它可以帮助开发者快速识别和解决App中可能存在的隐私问题,确保App符合相关的隐私…

    other 2023年10月14日
    00
  • Android软件更新安装。

    Android软件更新安装 Android系统是目前全球使用最广泛的移动操作系统之一,而Android软件的更新也是我们日常使用中必不可少的部分。在智能手机上,软件更新可以提升手机性能、修复已知漏洞和缺陷、引入新特性等。本篇文章将提供详细的步骤教你如何更新和安装Android软件。 步骤一:检查软件更新 在Android设备上,我们可以通过以下步骤来检查软件…

    其他 2023年3月28日
    00
  • Java中的接口多继承机制

    Java中的接口多继承机制,是指一个接口可以同时继承多个父接口的方法定义。这可以使得接口更加灵活和可扩展,使得我们可以更好地进行代码设计和重用。撰写完整攻略的过程中,我将包含以下内容: 什么是Java中的接口多继承机制? 接口多继承的语法和使用方法 示例说明 示例一:解释接口继承多个其他接口的用法和适用场景。 示例二:展示如何在实现类中实现多个继承的接口。 …

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