android cursor 分组,Android通讯录之分组联系人

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

一、获取所有的分组信息

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

}

}

}

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

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;

}

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

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;

}

四、通过联系人ID查询该联系人所属分组

private void getGroup(ContentResolver resolver,String

contactId){

Cursor cursor=null;

String[] groups= new

String[]{GroupMembership.GROUP_ROW_ID};

String

where=GroupMembership.CONTACT_ID+"="+contactId+" AND"

+Data.MIMETYPE + "=" + " ' " + GroupMembership.CONTENT_ITEM_TYPE+"

' ";

cursor=resolver.query(Data.CONTENT_URI,

groups, where, null, null);

while(cursor.moveToNext()){

String

id=cursor.getString(cursor.getColumnIndex(GroupMembership.GROUP_ROW_ID));

Log.i(TAG, "查询分组结果:"+id);

}

}

代码说明:

contactId : 联系人ID

GroupMembership.GROUP_ROW_ID :分组ID

Data.MIMETYPE + "=" + " ' " +

GroupMembership.CONTENT_ITEM_TYPE+" ' "

表示DATA表中属于分组信息的数据,MIMETYPE表示数据类型。

技术说明:

分组信息保存在URI为android.provider.ContactsContract.Groups.CONTENT_URI的分组表中。这个表定义了分组的ID、名称及修改等各种信息。

但联系人的分组信息保存在URI为android.provider.ContactsContract.Data.CONTENT_URI的表中。分组记录的Data.MIMETYPE值为android.provider.ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE。

android.provider.ContactsContract.CommonDataKinds.GroupMembership类定义了在DATA表(URI为Data.CONTENT_URI)中有哪些分组信息的字段,如GroupMembership.GROUP_ROW_ID,是分组的ID,对应着分组表(URI为.Groups.CONTENT_URI)的Groups._ID字段。

以上代码 在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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值