Android 获取属于特定组的联系人列表
有人知道如何在Android中获取属于某个特定组的联系人列表吗 我需要这样的东西:Android 获取属于特定组的联系人列表,android,list,contacts,android-contacts,Android,List,Contacts,Android Contacts,有人知道如何在Android中获取属于某个特定组的联系人列表吗 我需要这样的东西: Select * from contacts where group_id = "1234" Cursor groupCursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); final ArrayList<String> contacts = new ArrayList<String&g
Select * from contacts where group_id = "1234"
Cursor groupCursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
final ArrayList<String> contacts = new ArrayList<String>();
while(groupCursor.moveToNext()) {
String name = groupCursor.getString(groupCursor.getColumnIndex(ContactsContract.Constacts.DisplayName ));
contacts.add(name);
}
我可以通过以下方式获得所有联系人或所有组的列表:
Select * from contacts where group_id = "1234"
Cursor groupCursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
final ArrayList<String> contacts = new ArrayList<String>();
while(groupCursor.moveToNext()) {
String name = groupCursor.getString(groupCursor.getColumnIndex(ContactsContract.Constacts.DisplayName ));
contacts.add(name);
}
cursorgroupcursor=cr.query(ContactsContract.Contacts.CONTENT\u URI,null,null,null);
最终ArrayList联系人=新建ArrayList();
while(groupCursor.moveToNext()){
字符串名称=groupCursor.getString(groupCursor.getColumnIndex(ContactsContract.Constacts.DisplayName));
联系人。添加(姓名);
}
这是我使用的,对我来说很好用
Uri groupURI = ContactsContract.Data.CONTENT_URI;
String[] projection = new String[]{
ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID ,
ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID};
Cursor c = managedQuery(groupURI,
projection,
ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID+"="+groupID,
null,null);
这要求您已经拥有组id,并且可以通过查询ContactsContract.Groups找到该组id{
public void getSampleContactList(int groupID) {
contactList = new ArrayList<ConatctData>();
Uri groupURI = ContactsContract.Data.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID };
Cursor c = getContentResolver().query(
groupURI,
projection,
ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID
+ "=" + groupID, null, null);
while (c.moveToNext()) {
String id = c
.getString(c
.getColumnIndex(ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID));
Cursor pCur = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[] { id }, null);
while (pCur.moveToNext()) {
ConatctData data = new ConatctData();
data.name = pCur
.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
data.phone = pCur
.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactList.add(data);
}
pCur.close();
}
}
class ConatctData {
String phone, name;
}
contactList=新的ArrayList();
Uri groupURI=ContactsContract.Data.CONTENT\u Uri;
字符串[]投影=新字符串[]{
Contacts contract.CommonDataTypes.Phone.DISPLAY\u NAME,
ContactsContract.CommonDataTypes.GroupMembership.CONTACT\u ID};
游标c=getContentResolver().query(
groupURI,
投影,
ContactsContract.CommonDataTypes.GroupMembership.GROUP\u行\u ID
+“=”+groupID,null,null);
while(c.moveToNext()){
字符串id=c
.getString(c)
.getColumnIndex(ContactsContract.CommonDataTypes.GroupMembership.CONTACT_ID));
游标pCur=getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,
ContactsContract.CommonDataTypes.Phone.CONTACT_ID+“=?”,
新字符串[]{id},null);
while(pCur.moveToNext()){
ConatctData data=新的ConatctData();
data.name=pCur
.getString(pCur)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY_NAME));
data.phone=pCur
.getString(pCur)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
联系人列表。添加(数据);
}
pCur.close();
}
}
类ConatctData{
字符串电话,姓名;
}
希望这将帮助您根据组id找到联系人
void getlistofcontacts( long groupId ) {
String[] cProjection = { Contacts.DISPLAY_NAME, GroupMembership.CONTACT_ID };
Cursor groupCursor = getContentResolver().query(
Data.CONTENT_URI,
cProjection,
CommonDataKinds.GroupMembership.GROUP_ROW_ID + "= ?" + " AND "
+ ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "='"
+ ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'",
new String[] { String.valueOf(groupId) }, null);
if (groupCursor != null && groupCursor.moveToFirst())
{
//Toast.makeText(this,"if",1000).show();
do
{
int nameCoumnIndex = groupCursor.getColumnIndex(Phone.DISPLAY_NAME);
String name = groupCursor.getString(nameCoumnIndex);
long contactId = groupCursor.getLong(groupCursor.getColumnIndex(GroupMembership.CONTACT_ID));
Cursor numberCursor = getContentResolver().query(Phone.CONTENT_URI,
new String[] { Phone.NUMBER }, Phone.CONTACT_ID + "=" + contactId, null, null);
if (numberCursor.moveToFirst())
{
int numberColumnIndex = numberCursor.getColumnIndex(Phone.NUMBER);
do
{
String phoneNumber = numberCursor.getString(numberColumnIndex);
Toast.makeText(this,name+phoneNumber,1000).show();
} while (numberCursor.moveToNext());
numberCursor.close();
}
else
{
Toast.makeText(this,"no contact are there",1000).show();
}
} while (groupCursor.moveToNext());
groupCursor.close();
}
else
{
Toast.makeText(this,"no such group exists",1000).show();
}
}
然后从你想要的地方调用这个函数我猜
联系人ID
被用来查找联系人?我想这有一个bug。例如,如果您的组的groupID为“15”。然后,如果使用name=“15”创建联系人,它将列在光标中!这是因为您的查询只检查GROUP_ROW_ID=groupID,这意味着数据表中的data1=15。您还应该检查数据表中的行是否与组成员身份有关:ContactsContract.data.MIMETYPE+“=”+“+””+“+ContactsContract.CommonDataTypes.GroupMembership.CONTENT\u项目_TYPE@JoonasS我有点困惑,你是说添加“ContactsContract.Data.MIMETYPE+”=“+”“+””+ContactsContract.CommonDataTypes.GroupMembership.CONTENT\u ITEM\u TYPE”添加到查询中,或者用它替换现有查询?我的意思是作为附加检查。所以选择类似于:ContactsContract.Data.MIMETYPE+“=”+ContactsContract.CommonDataTypes.GroupMembership.CONTENT\u ITEM\u TYPE+”和“+contacts contract.CommonDataTypes.GroupMembership.GROUP\u ROW\u ID+”=“+groupID”。这样,它将选择说明组成员身份的行。如果不进行检查,它可能会发现另一行与组成员身份无关(数据表中有许多行mimetype)当您要使用游标加载程序时,该怎么办?因此所有数据行都有一个contacts contract.commonDataTypes.Phone.DISPLAY\u NAME列?!?