【发布时间】:2012-11-04 12:30:41
【问题描述】:
我需要确定某个特定联系人是否是给定组的成员。我一直在使用下面的代码,并证明它可以使用运行 Gingerbread 的手机工作。但是我一直试图在运行 Android 4.0.3 的 HTC One S 上运行它,但它失败了。 API 规范有变化吗?我的代码如下。
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;
}
}
}
除了更改查询以纯粹找出联系人所属的组之外:
String select = "contact_id=" + contactID;
产生以下调试输出。在某些情况下 groupRowID 看起来像一个组 ID,在其他情况下它是联系人号码或联系人姓名。请注意,我正在使用我的家庭固定电话呼叫测试,并且出现了这种情况。另外 - 我在手机上只定义了 10 个组,并且在输出中打印了 11、12 和 13 的 id ...可能是我遗漏了什么?我绝对知道我传入的 contact_id 是 Coworkers 组的成员(我手机上的 group_ID 为 5),但这在 ICS 中永远不会返回。我已使用两部手机上的联系人管理器应用独立验证了 HOME 的群组成员资格。
11-04 11:48:21.980:D/DEBUG(10145):在 checkGroupMembership 中选择: contact_id=133 11-04 11:48:21.990: D/DEBUG(10145): 中的记录数 checkGroupMembership: 13 11-04 11:48:22.000: D/DEBUG(10145): checkGroupMembership 中的 groupRowId:null InVisiblegroup = 1 11-04 11:48:22.000:D/DEBUG(10145):检查组成员中的联系人 ID:133 11-04 11:48:22.000: D/DEBUG(10145): groupRowId in checkGroupMembership: InVisiblegroup = 1 11-04 11:48:22.000: D/DEBUG(10145):checkGroupMembership 中的 ContactID:133 11-04 11:48:22.000:D/DEBUG(10145):checkGroupMembership 中的 groupRowId: 004-414-83326995 InVisiblegroup = 1 11-04 11:48:22.000: D/DEBUG(10145):checkGroupMembership 中的 ContactID:133 11-04 11:48:22.000:D/DEBUG(10145):checkGroupMembership 中的 groupRowId: 014-833-26995 InVisiblegroup = 1 11-04 11:48:22.000: D/MYOB(10145): checkGroupMembership 中的 ContactID:133 11-04 11:48:22.030: D / MYOB(10145):checkGroupMembership中的groupRowId: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): checkGroupMembership 中的 groupRowId:10 InVisiblegroup = 1 11-04 11:48:22.030:D/DEBUG(10145):检查组成员中的联系人 ID: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):checkGroupMembership 中的 ContactID:133 11-04 11:48:22.030:D/DEBUG(10145):checkGroupMembership 中的 groupRowId: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): checkGroupMembership 中的 groupRowId:13 InVisiblegroup = 1 11-04 11:48:22.030:D/DEBUG(10145):检查组成员中的联系人 ID: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):checkGroupMembership 中的 ContactID:133 11-04 11:48:22.030:D/DEBUG(10145):checkGroupMembership 中的 groupRowId: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): checkGroupMembership 中的 groupRowId:9 InVisiblegroup = 1 11-04 11:48:22.030:D/DEBUG(10145):检查组成员中的联系人 ID: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):checkGroupMembership 中的 ContactID:133
附:请有足够权限的人将“GroupMembership”作为标签添加到网站。
【问题讨论】:
-
我已经更新了用于列出设备上的组的代码(在单独的应用程序中运行)也返回 groups.SYSTEM_ID 并且现在返回组 _ID 为 11, 12 和 13。所以现在我必须弄清楚如何根据 system_id 进行选择,这有点棘手,因为同一组的某些条目出现 2 或 3 次(基于 Groups.TITLE)。代码是: final Cursor cursor = contentResolver.query(Uri.parse("content://com.android.contacts/groups"), (new String[] { Groups._ID, Groups.SYSTEM_ID, Groups.TITLE}) , null, null, null);
标签: android android-4.0-ice-cream-sandwich group-membership