(android)解剖contentProvider获取通讯录列表-002
//基于上一次说的内容 ,我们来弄下获取联系人详细信息,直接上代码,在第三篇补上其他的操作
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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。