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