Android中對Group的各種操作示例代碼

1.  增加Group

// create a group
ContentValues values = new ContentValues();
values.put(ContactsContract.Groups.TITLE, “GROUPNAME”);
Uri uri = getContentResolver().insert(ContactsContract.Groups.CONTENT_URI, values);

其中GROUPNAME是要創建的Group的名稱。


2. 刪除一個Group

// delete a group
// 做刪除標誌,但未真正刪除。真正的刪除會在同步時自動實現
// getContentResolver().delete(ContactsContract.Groups.CONTENT_URI, ContactsContract.Groups._ID + " = " + raw_group_id, null);
	
// 真正意義上的刪除
Uri uri = ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, raw_group_id);
Uri.Builder b = uri.buildUpon();
b.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true");
uri = b.build();
getContentResolver().delete(uri, null, null);
其中raw_group_id是Group的ID,對應的是ContactsContract.Groups中的_ID字段。


3. 查詢所有的Group

// query all groups
Cursor groupCursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, 
	new String[]{ContactsContract.Groups.TITLE, ContactsContract.Groups._ID}, 
	null, 
	null, 
	null);

查詢出所有Group的名稱和ID。


4. 更改指定Group的名稱

// update a group
ContentValues values = new ContentValues();
values.put(ContactsContract.Groups.TITLE, "NEWGROUPTITLE");
getContentResolver().update(ContactsContract.Groups.CONTENT_URI, 
	values, 
	ContactsContract.Groups._ID + " = " + raw_group_id, 
	null);
其中NEWGROUPTITLE是新取的Group名稱,raw_group_id是Group的ID。


5. 查詢一個Group中的所有聯繫人

// To query all contacts in a group

// First, query the raw_contact_ids of all the contacts in the group
Cursor groupContactCursor = getContentResolver().query(Data.CONTENT_URI, 
	new String[]{Data.RAW_CONTACT_ID}, 
	Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "' AND " + ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + " = " + raw_group_id, 
	null, 
	null);

// Second, query the corresponding name of the raw_contact_id
while(groupContactCursor.moveToNext())
{
	Cursor contactCursor = getContentResolver().query(Data.CONTENT_URI, 
	new String[]{Data.RAW_CONTACT_ID, StructuredName.FAMILY_NAME, StructuredName.GIVEN_NAME}, 
	Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "' AND " + Data.RAW_CONTACT_ID + "=" + groupContactCursor.getInt(0), 
	null, 
	null);
	contactCursor.moveToNext();
	Log.e("TestContractGroupOperationActivity", "Member name is: " + contactCursor.getString(1) + " " + contactCursor.getString(2));
	contactCursor.close();
}
groupContactCursor.close();

6. 從Group中刪除某個聯繫人

// Delete a contact from a group
Uri uri = Data.CONTENT_URI;
Uri.Builder b = uri.buildUpon();
b.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true");
uri = b.build();
			
getContentResolver().delete(uri, Data.RAW_CONTACT_ID + "=" + raw_contact_id + " AND " + ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + " =" + raw_group_id, null);
從ID爲raw_group_id的Group中,刪除ID爲raw_contact_id的Contact。


7. 查詢某個聯繫人處於那幾個Group中

// First, query all the group ids that a contact is in
Cursor groupCursor = getContentResolver().query(Data.CONTENT_URI, 
	new String[]{ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID}, 
	ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "='" + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE +"' AND " + Data.RAW_CONTACT_ID + " = " + raw_contact_id, 
	null, 
	null);
			
// Second, get all the corresponding group names
while(groupCursor.moveToNext())
{
	Cursor groupNameCursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, 
		new String[]{ContactsContract.Groups.TITLE}, 
		ContactsContract.Groups._ID + "=" + groupCursor.getInt(0), 
		null, 
		null);
	groupNameCursor.moveToNext();
	Log.e("Test", groupNameCursor.getString(0));
	groupNameCursor.close();
}
groupCursor.close();

其中raw_contact_id是聯繫人的ID。

需要注意的是,groupCursor中所包含的group_raw_id有可能重複,爲了消除這種重複,可以將groupCursor中的內容倒入到一個Set容器中,再根據Set容器中的元素(具有唯一性的group_raw_id),查找其對應的Group的名稱。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章