Android个人手机通讯录开发详解

Android个人手机通讯录开发详解

概述

通讯录是手机操作系统中非常重要的一项功能,大多数APP,尤其是社交类APP都需要使用到该功能。本文将详细讲解如何在Android平台上开发个人手机通讯录,并提供两个示例。通讯录主要分为分组和联系人两个部分,下面将对这两部分进行详细介绍。

分组

分组主要用来对联系人进行分类,让用户能够更加方便地查找和编辑联系人信息。通讯录中的分组列表通常位于页面的左侧,点击分组列表的某一个分组,系统就会显示该分组中的联系人列表。

创建分组

要创建一个新的分组,我们可以通过以下步骤完成:

  1. 在布局文件中添加一个ListView控件,用来显示分组列表
<ListView
    android:id="@+id/groupListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
  1. 在Activity中使用CursorLoader来加载分组数据,并使用SimpleCursorAdapter将数据绑定到ListView上
getLoaderManager().initLoader(0, null, new LoaderManager.LoaderCallbacks<Cursor>() {
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new CursorLoader(
                MainActivity.this,
                ContactsContract.Groups.CONTENT_URI,
                new String[] {
                        ContactsContract.Groups._ID,
                        ContactsContract.Groups.TITLE
                },
                ContactsContract.Groups.DELETED + "!= ? AND " + ContactsContract.Groups.ACCOUNT_TYPE_AND_DATA_SET + "!= ?",
                new String[] { "0", null },
                ContactsContract.Groups.TITLE + " COLLATE LOCALIZED ASC");
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(MainActivity.this,
                android.R.layout.simple_list_item_1,
                data,
                new String[] { ContactsContract.Groups.TITLE },
                new int[] { android.R.id.text1 });
        mGroupListView.setAdapter(adapter);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {

    }
});
  1. 在Activity中处理ListView的点击事件,跳转到联系人列表页面,并将该分组的id作为参数传递给联系人列表页面
mGroupListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Cursor cursor = (Cursor) adapterView.getItemAtPosition(i);
        int groupId = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsContract.Groups._ID));
        Intent intent = new Intent(MainActivity.this, ContactListActivity.class);
        intent.putExtra(ContactListActivity.EXTRA_GROUP_ID, groupId);
        startActivity(intent);
    }
});

删除分组

要删除一个已有的分组,可以使用ContentResolver的delete方法,并指定删除该分组的条件。代码如下:

ContentResolver resolver = getContentResolver();
Uri uri = ContactsContract.Groups.CONTENT_URI;
String where = ContactsContract.Groups._ID + " = ?";
String[] selectionArgs = new String[] { String.valueOf(groupId) };
resolver.delete(uri, where, selectionArgs);

联系人

联系人是通讯录的核心内容,包括姓名、电话号码、电子邮件地址等信息。在通讯录中,每个联系人都可以属于一个或多个分组,以便于分类管理。

显示联系人

要显示联系人列表,我们可以使用以下步骤:

  1. 在布局文件中添加一个ListView控件,用来显示联系人列表
<ListView
    android:id="@+id/contactListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
  1. 在Activity中使用Loader来加载并显示联系人数据,和加载分组数据的步骤类似,这里不再赘述。需要注意的是,在处理Loader的回调函数中,需要使用CursorAdapter来将数据绑定到ListView上。

  2. 在Activity中处理ListView的点击事件,跳转到联系人编辑页面,并将该联系人的id作为参数传递给编辑页面。示例代码如下:

mContactListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Cursor cursor = (Cursor) adapterView.getItemAtPosition(i);
        int contactId = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
        Intent intent = new Intent(MainActivity.this, ContactEditActivity.class);
        intent.putExtra(ContactEditActivity.EXTRA_CONTACT_ID, contactId);
        startActivity(intent);
    }
});

新建联系人

要新建一个联系人,可以使用ContactsContract.RawContacts.CONTENT_URI和ContentValues两个类。以下代码演示了如何创建一个新联系人,并插入数据库中。

ContentValues values = new ContentValues();
long rawContactId = ContentUris.parseId(getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values));
values.clear();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Tom");
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);

删除联系人

要删除一个已有的联系人,也可以使用ContentResolver的delete方法,并指定删除该联系人的条件。代码如下:

ContentResolver resolver = getContentResolver();
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String where = ContactsContract.Contacts._ID + " = ?";
String[] selectionArgs = new String[] { String.valueOf(contactId) };
resolver.delete(uri, where, selectionArgs);

示例

这里提供两个综合了上述分组和联系人功能的示例,供读者参考:
- Android通讯录分组Demo
- Android通讯录Demo(分组+联系人)

以上就是Android个人手机通讯录开发的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android个人手机通讯录开发详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java File类的常用方法总结

    如果你需要使用Java程序中的文件操作功能,那么File类就是你需要用的类。本文通过对Java File类的常用方法进行总结来给你提供一份完整的攻略。 File类的常用方法 下面我们对File类的常用方法进行调查总结。 创建File对象 我们可以使用下面的代码来创建File对象。 File file = new File("文件路径");…

    Java 2023年6月1日
    00
  • Java有趣好玩的图形界面开发八个案例实现

    感谢您对Java图形界面开发的关注,关于Java有趣好玩的图形界面开发八个案例实现的攻略,下面给你一个详细的介绍。 八个案例 Java图形界面开发八个案例是由Java研究社推出的一门Java课程。该课程主要通过八个实例,让大家初步掌握Java图形界面的开发。这八个案例包括:电子时钟、文字跑马灯、图片浏览器、字母连线游戏、翻牌游戏、俄罗斯方块、英雄连连看、飞机…

    Java 2023年5月18日
    00
  • Java实现简单控制台版ATM系统

    Java实现简单控制台版ATM系统攻略 1. 需求分析 控制台版ATM系统主要需要实现以下功能: 用户登录、注册 存款、取款、查询余额 转账功能 2. 技术选型 本篇攻略使用Java语言实现控制台版ATM系统,使用了Java IO、集合等基础知识进行编写。在框架上,本篇攻略并未用到任何框架。 3. 代码实现 代码实现主要分为以下几个部分: 3.1 用户登录、…

    Java 2023年5月18日
    00
  • 什么是 JVM 参数?

    以下是关于 JVM 参数的完整使用攻略: 什么是 JVM 参数? JVM 参数是指在启动 Java 虚拟机时,通过命令行或配置文件等方式传递给 JVM 的一些参数。这些参数可以用来控制 JVM 的行为,例如设置堆大小、垃圾回收器类型、线程数等。JVM 参数可以分为标准参数和非标准参数两种。 标准参数是由 JVM 官方定义的参数,用于控制 JVM 的基本行为,…

    Java 2023年5月12日
    00
  • springboot下使用shiro自定义filter的个人经验分享

    下面是“springboot下使用shiro自定义filter的个人经验分享”的详细攻略: 1. 什么是Shiro? Apache Shiro是为Java平台开发的安全框架。提供了身份验证,授权,加密和会话管理的API,灵活且易于使用。Shiro可以轻松地与任何应用程序集成,从命令行应用程序到大型企业级Web应用程序。 2. 什么是自定义filter? 在S…

    Java 2023年6月15日
    00
  • mybatis原理概述入门教程

    介绍 MyBatis是一种持久层框架,它允许你使用普通SQL查询、存储过程和高级映射,以及高级映射的结果集和连接。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及缓存代码的需求。MyBatis可以与Spring框架集成。 MyBatis原理概述包括以下方面: 1.配置文件 2.映射文件 3.会话工厂 4.SqlSessionFactoryBui…

    Java 2023年5月20日
    00
  • 实验五 Java多线程程序设计

    目的 1. 掌握Runnable接口实现多线程的方法 2. 掌握Thread类实现多线程的用法 3. 掌握Java语言中多线程编程的基本方法 1. 线程接力(45分) 要求:编写一个应用程序,除了主线程外,还有三个线程:first、second和third。first负责模拟一个红色的按钮从坐标(10,60)运动到(100,60);second负责模拟一个绿…

    Java 2023年5月10日
    00
  • SpringBoot使用Spring Security实现登录注销功能

    首先我们需要了解一下Spring Security的基本概念和特性,它是一个基于Spring框架的安全性解决方案,可以为应用提供认证(Autentication)和授权(Authorization)服务。Spring Security的特性包括基于Filter的安全性,灵活的认证和授权机制,以及大量的集成支持等等。 下面是实现SpringBoot使用Spri…

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