根据群组查询联系人-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();
}
}
}
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();
}
}
}
相关文章推荐
- android根据电话号码查询联系人名称,导出通讯录所有联系人的方法
- android查询系统联系人信息
- android2.2根据电话号码查询联系人姓名的方法
- Android查询联系人群组成员及号码
- android系统联系人查询流程
- android根据电话号码查询联系人名称,导出通讯录所有联系人的方法
- Android-数据存储(Content Provider ,调用系统 联系人 ContentProvider实现查询和增加联系人)
- 【Android】利用AutoCompleteTextView控件联系人自动补全与根据联系人姓名查询电话
- android分页查询获取系统联系人信息
- 操作Android中联系人,通话记录,短息,的URI,和具体的查询语句,字段注解。(根据自己需求)
- android 6.0之后查询系统联系人信息
- Android联系人--群组分组查询
- android根据电话号码查询联系人名称,导出通讯录所有联系人的方法
- Android添加数据到系统自带的联系人界面
- Android系统联系人全特效实现(上)分组导航和挤压动画(附源码)
- Android系统联系人全特效实现(下),字母表快速滚动
- Linux系统根据网段信息查询网卡
- Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
- Android系统联系人全特效实现(下),字母表快速滚动
- 毕业设计_Android短信查询及加密系统_短信查询