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

yizhihongxing

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日

相关文章

  • Go java 算法之括号生成示例详解

    Go java 算法之括号生成示例详解 算法介绍 本算法是使用回溯算法来实现的,先在左边放置一个'(‘,再将’)’放置在之前的'(‘后面。在任意时刻,使用的左括号数量都不应超过 n,也就是原本需要生成的数量。 代码实现 public List<String> generateParenthesis(int n) { List<String&…

    Java 2023年5月19日
    00
  • SpringMVC中Json数据格式转换

    下面是详细讲解“SpringMVC中Json数据格式转换”的完整攻略: 什么是SpringMVC中Json数据格式转换? 在SpringMVC中,我们经常需要使用JSON数据格式传输数据,如返回AJAX请求结果等。Json数据格式是一种轻量级的数据交换格式,具有串行化和反串行化的特性,广泛使用在web应用程序的数据传输。 SpringMVC中Json数据格式…

    Java 2023年5月26日
    00
  • Java 使用maven实现Jsoup简单爬虫案例详解

    下面我将详细讲解“Java使用maven实现Jsoup简单爬虫案例详解”的完整攻略。 什么是Maven Maven 是一种用于 Java 项目管理和构建的工具。Maven 使用一个基于项目对象模型(POM),来管理项目的构建、文档和报告的开源项目管理工具。 什么是Jsoup Jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、H…

    Java 2023年6月15日
    00
  • 在Mac OS上安装Tomcat服务器的教程

    在Mac OS上安装Tomcat服务器的教程 简介 Tomcat是一个基于Java语言实现的Web服务器,也可作为一个Servlet容器运行,目前是最为流行的Web服务器之一。在Mac OS操作系统上安装Tomcat服务器,可以方便地搭建Web应用程序,供其他用户访问。本文将介绍如何在Mac OS上安装Tomcat服务器的详细过程。 步骤一:下载Tomcat…

    Java 2023年5月19日
    00
  • 浅谈Java多线程的优点及代码示例

    首先我们来讲一下Java多线程的优点。Java是一种多线程支持语言,它可以让程序员通过并发编程来充分利用硬件资源,提高程序的运行效率和性能。下面是Java多线程的优点: 提高程序的性能和响应速度。在多核CPU的计算机上使用多线程可以使得程序在执行计算密集型任务时,可以同时利用多个CPU核心,提高程序并发处理的能力,提高程序的执行效率。同时,在IO密集型任务中…

    Java 2023年5月26日
    00
  • Java性能分析工具的作用是什么?

    Java性能分析工具的作用 Java性能分析工具是用来检测Java程序中的性能问题并找出优化方法的工具。Java程序中的性能问题可能包括了CPU占用率高、内存泄漏、线程阻塞等等。 Java程序中可能存在很多潜在的性能问题,但是代码很长、复杂、分散等原因让我们很难快速找出问题所在。使用性能分析工具可以帮助我们在尽可能短的时间内找到问题所在,使我们更快速地进行优…

    Java 2023年5月11日
    00
  • java实现的2048游戏完整实例

    Java实现的2048游戏完整实例攻略 实现思路 2048游戏的核心在于方块的移动和合并。因此,在Java中实现2048游戏的主要思路是: 随机生成游戏棋盘上的初始方块,使用二维数组来记录每个方块的位置和点数; 接受玩家的输入(上下左右方向键),移动棋盘上的方块并合并,生成新的方块; 判断游戏结束的条件(即棋盘是否被填满,无法进行移动),给予玩家胜利或失败的…

    Java 2023年5月18日
    00
  • Windows下Java调用可执行文件代码实例

    Windows下Java调用可执行文件代码实例 在Windows系统下,Java程序可以通过调用可执行文件(exe文件)来实现一些特定功能。本文将详细讲解如何在Java程序中调用可执行文件的步骤和过程。 准备工作 在开始之前,需要确保Java和可执行文件均已安装并配置好环境变量。 第一步:创建ProcessBuilder对象 在Java程序中调用可执行文件,…

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