Android开发:一键获取通讯录完整信息工具类

1 下载量 32 浏览量 更新于2024-08-30 收藏 62KB PDF 举报
本文主要介绍如何在Android应用开发中获取手机联系人信息,提供了一个工具类,便于开发者方便地访问和处理联系人数据。 在Android系统中,获取联系人信息通常涉及使用`ContactsContract`内容提供者。内容提供者是一个接口,允许应用程序访问和操作系统数据,如联系人、日历等。`ContactsContract`类提供了访问联系人数据的各种常量和URI,包括联系人的姓名、电话号码、电子邮件地址等。 下面是一个简化的工具类示例,用于获取和分类联系人信息: ```java package com.example.test; import java.util.ArrayList; import java.util.List; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Event; import android.provider.ContactsContract.CommonDataKinds.Im; import android.provider.ContactsContract.CommonDataKinds.Nickname; import android.provider.ContactsContract.CommonDataKinds.Note; import android.provider.ContactsContract.CommonDataKinds.Organization; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.CommonDataKinds.StructuredPostal; public class ContactInfoFetcher { public static List<Contact> fetchAllContacts(Context context) { List<Contact> contacts = new ArrayList<>(); Cursor cursor = context.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); while (cursor != null && cursor.moveToNext()) { Contact contact = new Contact(); // 获取基本联系人信息 String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID)); String displayName = cursor.getString(cursor.getColumnIndex(StructuredName.DISPLAY_NAME)); // 获取电话号码 String phoneNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER)); if (!phoneNumber.isEmpty()) { contact.addPhoneNumber(phoneNumber); } // 其他数据,例如电子邮件、组织、昵称等 // 这里可以添加更多查询来获取其他字段 contacts.add(contact); } if (cursor != null) { cursor.close(); } return contacts; } } class Contact { private String id; private String name; private List<String> phoneNumbers; // 其他属性,如email, organization等 // 构造函数、getter、setter方法 } ``` 这个工具类首先通过`ContentResolver`发起查询,获取`CommonDataKinds.Phone.CONTENT_URI`上的所有联系人。然后遍历`Cursor`,获取每个联系人的ID(`_ID`)和显示名称(`DISPLAY_NAME`)。对于电话号码,使用`Phone.NUMBER`字段。此外,你可以根据需要扩展该类,查询更多字段,例如电子邮件(`Email`)、事件(`Event`)、即时消息(`Im`)、昵称(`Nickname`)、笔记(`Note`)、组织(`Organization`)和地址(`StructuredPostal`)等。 注意,为了保护用户隐私,从Android 6.0(API级别23)开始,你需要在运行时请求读取联系人的权限(`READ_CONTACTS`)。在获取联系人信息之前,确保已经获得了用户的许可。 这个工具类简化了获取和处理Android设备上联系人信息的过程。通过理解`ContactsContract`内容提供者的工作原理,开发者可以更加高效地与手机通讯录进行交互,实现各种功能,如同步、备份或展示联系人列表。