标签:
//基于上一次说的内容 ,我们来弄下获取联系人详细信息,直接上代码,在第三篇补上其他的操作
package org.mo.pmas.resolver;
//本文章归属于小黑_mo所有,转载请说明出来http://my.oschina.net/moziqi/
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract;
import android.util.Log;
import org.mo.pmas.activity.R;
import org.mo.pmas.entity.Contact;
import org.mo.pmas.entity.Phone;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Created by moziqi on 2015/1/9 0009.
*/
public class ContactResolver implements BaseResolver<Contact> {
private Context mContext;
public ContactResolver(Context mContext) {
this.mContext = mContext;
}
@Override
public boolean save(Contact entity) {
return false;
}
@Override
public boolean update(Contact entity) {
return false;
}
@Override
public boolean delete(Contact entity) {
return false;
}
@Override
public List<Contact> findAll() {
List<Contact> contacts = new ArrayList<Contact>();
ContentResolver contentResolver = mContext.getContentResolver();
Cursor cursor = contentResolver.query(
ContactsContract.Contacts.CONTENT_URI,
null,
null,
null,
ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC");
if (cursor.moveToFirst()) {
do {
Contact contact = new Contact();
// 获得联系人的ID号
int contactId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
// 获得联系人姓名
String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
//获取联系人生日
String[] projection = new String[]{ContactsContract.CommonDataKinds.Event.DATA1};
String selection = ContactsContract.Data.MIMETYPE
+ "=‘"
+ ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE
+ "‘"
+ " and "
+ ContactsContract.CommonDataKinds.Event.TYPE
+ "=‘"
+ ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY
+ "‘"
+ " and "
+ ContactsContract.CommonDataKinds.Event.CONTACT_ID
+ " = " + contactId;
Cursor birthdayCursor = mContext.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
projection,
selection,
null,
null);
String birthday = null;
if (birthdayCursor.moveToFirst()) {
birthday = birthdayCursor.getString(birthdayCursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.DATA));
}
birthdayCursor.close();
//得到联系人头像Bitamp
Bitmap contactPhoto = null;
//得到联系人头像ID
int photoid = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
//photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
if (photoid > 0) {
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, (long) contactId);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(mContext.getContentResolver(), uri);
contactPhoto = BitmapFactory.decodeStream(input);
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
contactPhoto = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.h001);
}
// 获取该联系人邮箱
//我这里只需要获取一个,没有遍历全部出来
Cursor cursorEmail = mContext.getContentResolver().query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = " + contactId, null, null);
String email = null;
if (cursorEmail.moveToFirst()) {
email = cursorEmail.getString(
cursorEmail.getColumnIndex(
ContactsContract.CommonDataKinds.Email.DATA));
}
cursorEmail.close();
// 获取该联系人地址
//我这里只需要获取一个,没有遍历全部出来
Cursor cursorAddress = mContext.getContentResolver().query(
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID
+ " = " + contactId, null, null);
String address = null;
if (cursorAddress.moveToFirst()) {
//获取CITY
address = cursorAddress.getString(cursorAddress.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
}
cursorAddress.close();
contact.setId(contactId);
contact.setName(contactName);
contact.setContactPhoto(contactPhoto);
contact.setEmail(email);
contact.setAddress(address);
contact.setBirthday(birthday);
// 查看该联系人有多少个电话号码。如果没有这返回值为0
int has_phone_number = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (has_phone_number > 0) {
// 获得联系人的电话号码
Cursor cursorPhone = mContext.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
List<Phone> phones = new ArrayList<Phone>();
if (cursorPhone.moveToFirst()) {
do {
Phone phone = new Phone();
int phoneId = cursorPhone.getInt(
cursorPhone.getColumnIndex(
ContactsContract.CommonDataKinds.Phone._ID));
String phoneNumber = cursorPhone.getString(
cursorPhone.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
phone.setContact(contact);
phone.setId(phoneId);
phone.setPhoneNumber(phoneNumber);
//保存phone list集合
phones.add(phone);
} while (cursorPhone.moveToNext());
}
cursorPhone.close();
//如果有电话号码就把phones添加到contact上
contact.setPhones(phones);
}
contacts.add(contact);
} while (cursor.moveToNext());
}
cursor.close();
return contacts;
}
}
//另外2个bean类
public class Contact implements Serializable {
private Integer id;//编号
private String name;//名字
private String birthday;//生日
private String email;//邮箱地址
private String address;//通讯地址
private Bitmap contactPhoto;//联系人照片
private String phoneNumber;//联系电话
private String sortLetters; //显示数据拼音的首字母
private String contactGroup;//联系组名称
private String objectId;
private String createdAt;
private ContactGroup mContactGroup;
private MyUser myUser;
private List<Phone> phones;
//getset
}
package org.mo.pmas.entity;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
/**
* Created by moziqi on 2015/1/9 0009.
*/
public class Phone implements Serializable {
private Integer id;
private String objectId;
private String phoneNumber;
private Contact contact;
private MyUser myUser;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getObjectId() {
return objectId;
}
public void setObjectId(String objectId) {
this.objectId = objectId;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Contact getContact() {
return contact;
}
public void setContact(Contact contact) {
this.contact = contact;
}
public MyUser getMyUser() {
return myUser;
}
public void setMyUser(MyUser myUser) {
this.myUser = myUser;
}
@Override
public String toString() {
return "Phone{" +
"phoneNumber=‘" + phoneNumber + ‘\‘‘ +
", objectId=‘" + objectId + ‘\‘‘ +
", id=" + id +
‘}‘;
}
}
参考内容http://www.verydemo.com/demo_c131_i81641.html
http://www.eoeandroid.com/thread-24595-1-1.html
(android)解剖contentProvider获取通讯录列表-002
标签:
原文地址:http://my.oschina.net/moziqi/blog/365727