Android个人手机通讯录开发详解
概述
通讯录是手机操作系统中非常重要的一项功能,大多数APP,尤其是社交类APP都需要使用到该功能。本文将详细讲解如何在Android平台上开发个人手机通讯录,并提供两个示例。通讯录主要分为分组和联系人两个部分,下面将对这两部分进行详细介绍。
分组
分组主要用来对联系人进行分类,让用户能够更加方便地查找和编辑联系人信息。通讯录中的分组列表通常位于页面的左侧,点击分组列表的某一个分组,系统就会显示该分组中的联系人列表。
创建分组
要创建一个新的分组,我们可以通过以下步骤完成:
- 在布局文件中添加一个ListView控件,用来显示分组列表
<ListView
android:id="@+id/groupListView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
- 在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) {
}
});
- 在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);
联系人
联系人是通讯录的核心内容,包括姓名、电话号码、电子邮件地址等信息。在通讯录中,每个联系人都可以属于一个或多个分组,以便于分类管理。
显示联系人
要显示联系人列表,我们可以使用以下步骤:
- 在布局文件中添加一个ListView控件,用来显示联系人列表
<ListView
android:id="@+id/contactListView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
-
在Activity中使用Loader来加载并显示联系人数据,和加载分组数据的步骤类似,这里不再赘述。需要注意的是,在处理Loader的回调函数中,需要使用CursorAdapter来将数据绑定到ListView上。
-
在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技术站