安卓获得通讯录联系人

来源:互联网 发布:sql注入攻击1r1 编辑:程序博客网 时间:2024/06/04 20:03

1.首先是联系人实体类:

/** 用于描述一个联系人 */public class Contact  {private int id;private String name;private String email;private String address;private int photoId;private Bitmap photo;private String phone;public Contact() {// TODO Auto-generated constructor stub}//..get()set()

2.和联系人相关的


主要是查询下图中画图表,分别是:contracts,data,mimetype和rawcontacts


简单的几下就是raw_contract_id是和联系人对应的 ,是raw contracts 的主键,是contract,和data表的外键。

mimetype是一张映射表,告诉了数据存放的意义,如图:


data表中后面有15个字段,在android.provider.ContactsContract的内部类Data里面有解释各个字段的含义:

例如:

By convention, binary data is stored in DATA15.  The thumbnail of the photois stored in this column.</td>

所以:

流程就是先插Contacts,查出联系人的raw contracts id 和 photo id 字段,然后通过raw contracts id 查询raw contracts表 得到其他信息封装起来

在业务封装类的方法里面

//联系人List<Contact> contacts=new ArrayList<Contact>();//先查询Contacts表ContentResolver r=context.getContentResolver();//Uri uri=Uri.parse("content://com.android.providers.contact/contacts");Uri uri=Contacts.CONTENT_URI;//这里要用这个name_raw_contact_id  而不是那个 Contact._IDString[] columns={"name_raw_contact_id", Contacts.PHOTO_ID};Cursor c=r.query(uri, columns, null, null, null);String[] dataColumns={Data._ID,<span style="white-space:pre"></span>//0 Data.MIMETYPE, //1**Data.RAW_CONTACT_ID, //2Data.DATA1, //3Data.DATA15};//4while(c.moveToNext()){Contact contact=new Contact();int id=c.getInt(0);int photoId=c.getInt(1);contact.setId(id);contact.setPhotoId(photoId);Cursor c2=r.query(Data.CONTENT_URI, dataColumns, Data.RAW_CONTACT_ID+"="+id,  null, null);while(c2.moveToNext()){int dataId=c2.getInt(0);String mimetype=c2.getString(1);if(mimetype.equals(Email.CONTENT_ITEM_TYPE)){String email=c2.getString(3);contact.setEmail(email);}else if(mimetype.equals(Phone.CONTENT_ITEM_TYPE)){String phone=c2.getString(3);contact.setPhone(phone);}else if(mimetype.equals("vnd.android.cursor.item/postal-address_v2")){String address=c2.getString(3);contact.setAddress(address);}else if(mimetype.equals("vnd.android.cursor.item/name")){String name=c2.getString(3);contact.setName(name);}}c2.close();contacts.add(contact);}//排序按中文拼音首字母Collections.sort(contacts, new SortChineseName()); 








0 0
原创粉丝点击