您的位置:首页 > 移动开发 > Android开发

根据群组查询联系人-android系统联系人

2011-11-05 20:39 344 查看
//根据分组查询联系人的projection zjm add

public static final String[] RAW_PROJECTION = new String[] { Data.RAW_CONTACT_ID, };

//根据分组查询联系人的selection zjm add

public static final String RAW_CONTACTS_WHERE = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID

+ "=?"

+ " and "

+ Data.MIMETYPE

+ "="

+ "'"

+ ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE

+ "'";

//查询未分组联系人的过滤条件

public static final String RAW_CONTACTS_IN_NO_GROUP_SELECTION = "1=1) and "

+ Data.RAW_CONTACT_ID

+ " not in( select "

+ Data.RAW_CONTACT_ID

+ " from view_data_restricted where "

+ Data.MIMETYPE

+ "='"

+ GroupMembership.CONTENT_ITEM_TYPE

+ "') group by ("

+ Data.RAW_CONTACT_ID;

//查询可显示且未删除的群组的过滤条件

public static final String VISIBLE_GROUP_SELECTION = ContactsContract.Groups.GROUP_VISIBLE

+ "=1 and "

+ ContactsContract.Groups.DELETED

+ "=0";

/***

* 获取所有未分组的联系人的rawId和name zjm add

*/

private void getContactsNullCircles(){

List<ContactsBean> conBeanList = new ArrayList<ContactsBean>();

//查询未分组联系人的rawId 和 name

Cursor cursor = mContentResolver.query(

Data.CONTENT_URI,

null,

RAW_CONTACTS_IN_NO_GROUP_SELECTION,

null, null);

int rawIdIndex = cursor.getColumnIndex(Data.RAW_CONTACT_ID);

int i=0;

while(cursor.moveToNext()){

long rawId = cursor.getLong(rawIdIndex);

String conName = getConDisplayNameByRawId(rawId);

Log.i("raw id & name & num =>", rawId + "&&" + conName + "&&" + i++);

}

}

/***

* 获取各分组的联系人的rawId和name,及分组的id zjm add

*/

private void getContactsInCircles(){

Cursor circleCursor = mContentResolver.query(Groups.CONTENT_URI, null,

VISIBLE_GROUP_SELECTION, null,

null);

int circleIdIndex = circleCursor.getColumnIndex(Groups._ID);

//这里查询到的群组名字不是真正的显示名字,其实对应的应该是Group表中的display_title字段,

//但是貌似没有呢~表里有这个字段,但是api不提供这个字段的查询

int circleNameIndex = circleCursor.getColumnIndex(Groups.TITLE);

while (circleCursor.moveToNext()) {

long circleId = circleCursor.getLong(circleIdIndex);

String circleName = circleCursor.getString(circleNameIndex);

Log.i("group id & name =>", circleId + "&&" + circleName);

Cursor conRawIdCursor = mContentResolver.query(Data.CONTENT_URI, RAW_PROJECTION,

RAW_CONTACTS_WHERE,

new String[]{"" + circleId},

null);

//这里查询的是系统联系人data表中的RAW_CONTACT_ID字段,获取联系人的rawId

int rawIdIndex = conRawIdCursor.getColumnIndex(Data.RAW_CONTACT_ID);

int i =0;

while(conRawIdCursor.moveToNext()){

long conRawId = conRawIdCursor.getLong(rawIdIndex);

String conName = getConDisplayNameByRawId(conRawId);

Log.i("####group id & name =>", circleId + "&&" + circleName);

Log.i("raw id & name & num =>", conRawId + "&&" + conName + "&&" + i++);

}

}

}

/***

* 根据联系人rawId获取displayName zjm add

* @param rawId

* @return

*/

private String getConDisplayNameByRawId(long rawId){

String[] name = getNameByRawId(rawId);

String displayName = null;

if (name[2] != null) {

displayName = name[2];

} else if (name[0] != null) {

displayName = name[0] + "" + name[1];

} else if (name[1] != null) {

displayName = name[1];

}

return displayName;

}

/**

* 根据Id 得到 familyName 和 giveName [1,0]

*/

public String[] getNameByRawId(long rawId) {

String name[] = new String[3];

Cursor cursor = null;

try {

cursor = getContentResolver().query(Data.CONTENT_URI, null,

Data.RAW_CONTACT_ID + " = " + rawId + " and "

+ Data.MIMETYPE + " = '"

+ StructuredName.CONTENT_ITEM_TYPE + "'", null,

null);

if (cursor != null && cursor.getCount() > 0) {

cursor.moveToFirst();

name[0] = cursor.getString(cursor

.getColumnIndex(StructuredName.FAMILY_NAME));

if (name[0] == null) {

name[0] = "";

}

name[1] = cursor.getString(cursor

.getColumnIndex(StructuredName.GIVEN_NAME));

if (name[1] == null) {

name[1] = "";

}

name[2] = cursor.getString(cursor

.getColumnIndex(StructuredName.DISPLAY_NAME));

if (name[2] == null) {

name[2] = name[0] + name[1];

}

return name;

}

return null;

} catch (Exception e) {

return null;

} finally {

if (cursor != null && !cursor.isClosed()) {

cursor.close();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: