Android通讯录之分组联系人

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

一、获取所有的分组信息

/**
	 * 获取所有的 联系人分组信息
	 * 
	 * @return
	 */
	public List<GroupEntity> getAllGroupInfo() {

		List<GroupEntity> groupList = new ArrayList<GroupEntity>();

		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();
			}
		}
	}


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

/**
	 * 获取某个分组下的 所有联系人信息
	 * 思路:通过组的id 去查询 RAW_CONTACT_ID, 通过RAW_CONTACT_ID去查询联系人
		要查询得到 data表的Data.RAW_CONTACT_ID字段
	 * @param groupId
	 * @return
	 */
	public List<ContactEntity> 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<ContactEntity> contactList = new ArrayList<ContactEntity>();

		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;
	}

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

/**
	 * 获取手机所有联系人信息
	 * 
	 * @return
	 */
	public List<ContactEntity> 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<ContactEntity> contaList = new ArrayList<ContactEntity>();
		
		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});    
 


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值