I need to find out if a particular contact is a member of a given group. I have been working with the code below and have proved that it works using a handset running Gingerbread. However I have been trying to run it on my HTC One S running Android version 4.0.3 and it is failing. Has the API spec changed? My code is below.
public boolean checkGroupMembership(String groupID, String contactID, Context ctx) {
ContentResolver groupContentResolver = ctx.getContentResolver();
String select = "contact_id=" + contactID +
" AND " + GroupMembership.GROUP_ROW_ID + " = " + groupID +
" AND mimetype='vnd.android.cursor.item/group_membership'";
Cursor contactGroupCursor =
groupContentResolver.query(
Data.CONTENT_URI,
new String[] { GroupMembership.CONTACT_ID, GroupMembership.GROUP_ROW_ID, GroupMembership.IN_VISIBLE_GROUP },
select,
null,
null);
int records = contactGroupCursor.getCount();
try {
while(contactGroupCursor.moveToNext()){
String ContactID = contactGroupCursor.getString(contactGroupCursor.getColumnIndexOrThrow(GroupMembership.CONTACT_ID));
String groupRowId = contactGroupCursor.getString(contactGroupCursor.getColumnIndexOrThrow(GroupMembership.GROUP_ROW_ID));
String InVisiblegroup = contactGroupCursor.getString(contactGroupCursor.getColumnIndexOrThrow(GroupMembership.IN_VISIBLE_GROUP));
Log.d("DEBUG", "groupSourceId in checkGroupMembership: " + groupRowId + " InVisiblegroup = " + InVisiblegroup);
Log.d("DEBUG", "ContactID in checkGroupMembership: " + ContactID);
}
}
finally
{
contactGroupCursor.close();
}
// see if the contact is in this group
if (records > 0) {
return true;
}
else {
return false;
}
}
}
In addition changing the query to purely find out what groups the contact is a member of:
String select = "contact_id=" + contactID;
results in the following debug output. In some cases groupRowID looks like a group ID, in others it is the contact number or the name of the contact. Note that I am using my home landline to call test and this is appearing. Also - I only have 10 groups defined on the handset and an id of 11, 12 and 13 is printed in the output... It could be that I'm missing something? I definitely know that the contact_id I'm passing in is a member of the Coworkers group (group_ID 5 on my phone) but this is never returned in ICS. I have independently verified the group membership for HOME using contact manager apps on both handsets.
11-04 11:48:21.980: D/DEBUG(10145): select in checkGroupMembership : contact_id=133 11-04 11:48:21.990: D/DEBUG(10145): count of records in checkGroupMembership: 13 11-04 11:48:22.000: D/DEBUG(10145): groupRowId in checkGroupMembership: null InVisiblegroup = 1 11-04 11:48:22.000: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.000: D/DEBUG(10145): groupRowId in checkGroupMembership: InVisiblegroup = 1 11-04 11:48:22.000: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.000: D/DEBUG(10145): groupRowId in checkGroupMembership: 004-414-83326995 InVisiblegroup = 1 11-04 11:48:22.000: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.000: D/DEBUG(10145): groupRowId in checkGroupMembership: 014-833-26995 InVisiblegroup = 1 11-04 11:48:22.000: D/MYOB(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.030: D/MYOB(10145): groupRowId in checkGroupMembership: 01483326995 InVisiblegroup = 1 11-04 11:48:22.030: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.030: D/DEBUG(10145): groupRowId in checkGroupMembership: 10 InVisiblegroup = 1 11-04 11:48:22.030: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.030: D/DEBUG(10145): groupRowId in checkGroupMembership: 11 InVisiblegroup = 1 11-04 11:48:22.030: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.030: D/DEBUG(10145): groupRowId in checkGroupMembership: 12 InVisiblegroup = 1 11-04 11:48:22.030: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.030: D/DEBUG(10145): groupRowId in checkGroupMembership: 13 InVisiblegroup = 1 11-04 11:48:22.030: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.030: D/DEBUG(10145): groupRowId in checkGroupMembership: 7 InVisiblegroup = 1 11-04 11:48:22.030: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.030: D/DEBUG(10145): groupRowId in checkGroupMembership: 8 InVisiblegroup = 1 11-04 11:48:22.030: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.030: D/DEBUG(10145): groupRowId in checkGroupMembership: 9 InVisiblegroup = 1 11-04 11:48:22.030: D/DEBUG(10145): ContactID in checkGroupMembership: 133 11-04 11:48:22.030: D/DEBUG(10145): groupRowId in checkGroupMembership: HOME InVisiblegroup = 1 11-04 11:48:22.030: D/DEBUG(10145): ContactID in checkGroupMembership: 133
P.S. please could someone with sufficient privileges please add "GroupMembership" as a tag to the site.