更新
我终于想出了这个: 关键是要创建一个具有帐户名称和帐户类型的组,这在查看文档时并不是很明显(在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中列为列,而代码生成组为null。
我在android文档中的可能位置看到对source_id的引用,但我看不到如何获取它。
我想如果我将该组与一个帐户相关联,我会得到这个。 有没有人知道如何在群组中与帐户关联,或以其他方式设置此源ID字段?
答案 0 :(得分:2)
我终于弄清楚了这一点:关键是要创建一个具有帐户名称和帐户类型的组,这在查看文档时并不是很明显(在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);
答案 1 :(得分:1)
仍然需要在第二个示例中设置sourceid中的数据,然后才能检索它。
以下是docs关于sourceid的说法:
字符串SOURCE_ID读/写:
将此行唯一标识为其源帐户的字符串。 通常,它是在插入原始联系人时设置的,而不是 事后改变了。一个值得注意的例外是一个新的原始联系人:它 将有一个帐户名称和类型(可能还有一个数据集),但没有 来源ID。这向同步适配器指示新联系人需要 要创建服务器端并将其ID存储在相应的中 电话上的SOURCE_ID字段。