Android通讯录之分组联系人

Android通讯录之分组联系人

Android系统联系人信息通过 ContentProvider提供给我们使用,具体请参看contacts2.db

一、获取所有的分组信息

[java]

view plain

copy

/** * 获取所有的 联系人分组信息 * * @return */ public List getAllGroupInfo() { List groupList = new ArrayList(); Cursor cursor = null; try { cursor = context.getContentResolver().query(Groups.CONTENT_URI, null, null, null, null); while (cursor.moveToNext()) { GroupEntity ge = new GroupEntity(); int groupId = cursor.getInt(cursor.getColumnIndex(Groups._ID)); // 组id String groupName = cursor.getString(cursor .getColumnIndex(Groups.TITLE)); // 组名 ge.setGroupId(groupId); ge.setGroupName(groupName); Log.i("MainActivity", "group id:" + groupId + ">>groupName:" + groupName); groupList.add(ge); ge = null; } return groupList; } finally { if (cursor != null) { cursor.close(); } } }

二、获取某个分组下的所有联系人信息

[java]

view plain

copy

/** * 获取某个分组下的 所有联系人信息 * 思路:通过组的id 去查询 RAW_CONTACT_ID, 通过RAW_CONTACT_ID去查询联系人 要查询得到 data表的Data.RAW_CONTACT_ID字段 * @param groupId * @return */ public List getAllContactsByGroupId(int groupId) { String[] RAW_PROJECTION = new String[] { ContactsContract.Data.RAW_CONTACT_ID, }; String RAW_CONTACTS_WHERE = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + "=?" + " and " + ContactsContract.Data.MIMETYPE + "=" + "'" + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'"; // 通过分组的id 查询得到RAW_CONTACT_ID Cursor cursor = context.getContentResolver().query( ContactsContract.Data.CONTENT_URI, RAW_PROJECTION, RAW_CONTACTS_WHERE, new String[] { groupId + "" }, "data1 asc"); List contactList = new ArrayList(); while (cursor.moveToNext()) { // RAW_CONTACT_ID int col = cursor.getColumnIndex("raw_contact_id"); int raw_contact_id = cursor.getInt(col); // Log.i("getAllContactsByGroupId", "raw_contact_id:" + // raw_contact_id); ContactEntity ce = new ContactEntity(); ce.setContactId(raw_contact_id); Uri dataUri = Uri.parse("content://com.android.contacts/data"); Cursor dataCursor = context.getContentResolver().query(dataUri, null, "raw_contact_id=?", new String[] { raw_contact_id + "" }, null); while (dataCursor.moveToNext()) { String data1 = dataCursor.getString(dataCursor .getColumnIndex("data1")); String mime = dataCursor.getString(dataCursor .getColumnIndex("mimetype")); if ("vnd.android.cursor.item/phone_v2".equals(mime)) { ce.setTelNumber(data1); } else if ("vnd.android.cursor.item/name".equals(mime)) { ce.setContactName(data1); } } dataCursor.close(); contactList.add(ce); ce = null; } cursor.close(); return contactList; }

三、获取所有的联系人信息

[java]

view plain

copy

/** * 获取手机所有联系人信息 * * @return */ public List getAllContacts() { // 1.查询raw_contacts表 获取所有联系人的id Uri rawUri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri dataUri = Uri.parse("content://com.android.contacts/data"); List contaList = new ArrayList(); Cursor idCursor = context.getContentResolver().query(rawUri, new String[] { "contact_id" }, null, null, null); while (idCursor.moveToNext()) { int id = idCursor.getInt(0); // 得到联系人的id ContactEntity ce = new ContactEntity(); ce.setContactId(id); Cursor dataCursor = context.getContentResolver().query(dataUri, null, "raw_contact_id=?", new String[] { id+"" }, null); while (dataCursor.moveToNext()) { String data1 = dataCursor.getString(dataCursor .getColumnIndex("data1")); String mime = dataCursor.getString(dataCursor .getColumnIndex("mimetype")); if ("vnd.android.cursor.item/phone_v2".equals(mime)) { ce.setTelNumber(data1); } else if ("vnd.android.cursor.item/name".equals(mime)) { ce.setContactName(data1); } } dataCursor.close(); contaList.add(ce); ce = null; } idCursor.close(); return contaList; }

以上代码 在Android 4.0.3上测试没有问题

注:新建、删除群组等操作如下:

新建组(名字为name): ContentValues values = new ContentValues(); values.put(Groups.TITLE, name); getContentResolver().inser(Groups.CONTENT_URI, values); 删除组(Id为groupId): getContentResolver().delete(Uri.parse(Groups.CONTENT_URI +"?" +ContactsContract.CALLER_IS_SYNCADAPTER + "=true"),Groups._ID+"="+groupId,null); 给组重命名(oldName;newName;groupId): Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, groupId); ContentValues values = new ContentValues(); values.put(Groups.TITLE,newName); getContentResolver().update(uri,values,null,null); 给组添加成员(groupId,personId): ContentValues values = new ContentValues(); values.put(ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID,personId); values.put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID,groupId); values.put(ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE,ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE); getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); 给组移除成员(groupId,personId): getContentResolver().delete(ContactsContract.Data.CONTENT_URI,ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID + "=? and " +ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + "=? and " +ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "=?",new String[]{"" + personId,"" + groupId,ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE});

相关文章

安吉星有必要续费吗,安吉星套餐价格表2023

office365怎么登陆 10-15

张天爱是什么星座 有很多优点

beat365手机版官方网站正规 10-09

地溜子什么时候种,种植时间及注意事项

beat365手机版官方网站正规 06-29

“癸玺”“瘖兵”登场,《藏海传》引发忧虑,真的是封建迷信吗

365bet在线网址 09-19