Android_ContentProvider_访问通讯录

来源:互联网 发布:国外英语交流软件 编辑:程序博客网 时间:2024/05/22 08:02
本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/14649351

1.简介

联系人提供者是一个很强很灵活的应用组件,用来管理联系人信息,可以方便的操作和查询联系人信息!

主要的3张表格,contact,raw contact,data,但是我们操作主要为raw contact,data两张表


raw contacttable


data table


2.插入联系人

/** * 使用批处理,插入联系人信息 * 插入姓名,email,家庭电话,工作电话,手机号码信息 * @param view */public void insert() {String name = etName.getText().toString().trim();String email = etEmail.getText().toString().trim();String numHome = etNumHome.getText().toString().trim();String numWork = etNumWork.getText().toString().trim();String numMobile = etNumMobile.getText().toString().trim();ArrayList<ContentProviderOperation> list = new ArrayList<ContentProviderOperation>();ContentProviderOperation.Builder builder = null;// 插入原始数据builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_NAME, "").withValue(RawContacts.ACCOUNT_TYPE, "").withValue(RawContacts.DELETED, 0);list.add(builder.build());// 插入用户名builder = ContentProviderOperation.newInsert(Data.CONTENT_URI).withValue(StructuredName.DISPLAY_NAME, name).withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE).withValueBackReference(Data.RAW_CONTACT_ID, 0);list.add(builder.build());// 插入emailbuilder = ContentProviderOperation.newInsert(Data.CONTENT_URI).withValue(Email.ADDRESS, email).withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE).withValueBackReference(Data.RAW_CONTACT_ID, 0);list.add(builder.build());// 插入 家庭电话号码builder = ContentProviderOperation.newInsert(Data.CONTENT_URI).withValue(Phone.NUMBER, numHome).withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE).withValue(Phone.TYPE, Phone.TYPE_HOME).withValueBackReference(Data.RAW_CONTACT_ID, 0);list.add(builder.build());// 插入工作电话号码builder = ContentProviderOperation.newInsert(Data.CONTENT_URI).withValue(Phone.NUMBER, numWork).withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE).withValue(Phone.TYPE, Phone.TYPE_WORK).withValueBackReference(Data.RAW_CONTACT_ID, 0);list.add(builder.build());// 插入手机号码builder = ContentProviderOperation.newInsert(Data.CONTENT_URI).withValue(Phone.NUMBER, numMobile).withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE).withValue(Phone.TYPE, Phone.TYPE_MOBILE).withValueBackReference(Data.RAW_CONTACT_ID, 0);list.add(builder.build());try {resolver.applyBatch(ContactsContract.AUTHORITY, list);showOk();System.out.println("插入成功");} catch (Exception e) {e.printStackTrace();System.out.println("插入失败!");}}

3.访问通讯录

/** * 自定义加载线程,访问通讯录联系人信息 *  * @author Administrator *  */private class LoadContactThread extends Thread {@Overridepublic void run() {List<ContactsInfo> infos = new ArrayList<ContactsInfo>();Cursor cursor = resolver.query(RawContacts.CONTENT_URI,new String[] { RawContacts._ID }, RawContacts.DELETED + "=?", new String[] { "0" }, null);while (cursor.moveToNext()) {ContactsInfo info = new ContactsInfo();String id = cursor.getString(0);info.setId(id);Cursor c = resolver.query(Data.CONTENT_URI, new String[] {"data1", "data2", "mimetype" }, Data.RAW_CONTACT_ID+ "=?", new String[] { id }, null);while (c.moveToNext()) {String data = c.getString(0);String type = c.getString(1);String mimetype = c.getString(2);if (StructuredName.CONTENT_ITEM_TYPE.equals(mimetype)) { // 用户名info.setName(data);} else if (Email.CONTENT_ITEM_TYPE.equals(mimetype)) { // emailinfo.setEmail(data);} else if (Phone.CONTENT_ITEM_TYPE.equals(mimetype)) { // 电话int t = Integer.parseInt(type);if (Phone.TYPE_HOME == t) { // 家庭电话info.setNumHome(data);} else if (Phone.TYPE_WORK == t) { // 工作电话info.setNumWork(data);} else if (Phone.TYPE_MOBILE == t) {// 手机info.setNumMobile(data);}}}c.close(); // 关闭游标infos.add(info);// 添加进集合}cursor.close(); // 关闭游标Message msg = handler.obtainMessage();msg.obj = infos;handler.sendMessage(msg);}}