更新
我终于想通了:关键是创建具有帐户名称和帐户类型的组,这在查看文档时并不明显(ContactsContract.Groups 中没有具有这些名称的字段,它们位于 SyncColumns 中) . 当您使用这两个值创建组时,同步过程将为您生成 source_id,此时您可以使用组行 id 或 source_id 添加成员。
如果有人需要,这是一些示例代码。
ContentValues values = new ContentValues();
values.put(ContactsContract.Groups.TITLE,"yourGroupName");
values.put(ContactsContract.Groups.ACCOUNT_TYPE,"com.google");
values.put(ContactsContract.Groups.ACCOUNT_NAME,"someuser@gmail.com");
values.put(ContactsContract.Groups.GROUP_VISIBLE,1);
context.getContentResolver().insert(ContactsContract.Groups.CONTENT_URI, values);
然后添加成员:
values = new ContentValues();
values.put(ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE,ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID, 22);
//values.put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, 56);
// the above or
values.put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_SOURCE_ID,"sourceIdthatIsFilledInAfterSync");
//context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);
原始问题: 我一直在努力解决与同步组成员资格相关的问题,并认为我找到了原因,但我不知道如何解决它。
创建 2 个组后,一个通过手动编码另一个组,然后使用这些列查询组。
private final static String[] GROUP_COLUMNS = {
ContactsContract.Groups._ID,
ContactsContract.Groups.DATA_SET,
ContactsContract.Groups.NOTES,
ContactsContract.Groups.SYSTEM_ID,
ContactsContract.Groups.GROUP_VISIBLE,
ContactsContract.Groups.DELETED,
ContactsContract.Groups.SHOULD_SYNC,
ContactsContract.Groups.SOURCE_ID,
ContactsContract.Groups.TITLE
};
我可以这样转储结果。
: --- begin ---
: key = title , value = myNewTestGroup
: key = data_set , value = null
: key = _id , value = 45
: key = sourceid , value = null
: key = group_visible , value = 1
: key = system_id , value = null
: key = should_sync , value = 1
: key = notes , value = myNewTestGroup
: key = deleted , value = 0
: --- end ---
: --- begin ---
: key = title , value = Mytest2
: key = data_set , value = null
: key = _id , value = 46
: key = sourceid , value = 144c8b8d0cca8a52
: key = group_visible , value = 1
: key = system_id , value = null
: key = should_sync , value = 1
: key = notes , value = Mytest2
: key = deleted , value = 0
: --- end ---
手动创建的组 (Mytest2) 有一个 souceid,它在 ContactsContract.SyncColumns 中列为一列,而代码生成的组为空。
我在 android 文档中的可能位置看到了对 source_id 的引用,但我看不到如何获得一个。
我想如果我将该组与一个帐户相关联,我会以某种方式得到这个。有谁知道如何将组与帐户关联,或者以其他方式设置此源 ID 字段?