アップデート
私は最終的にこれを理解しました: 重要なのは、アカウント名とアカウントの種類を使用してグループを作成することです。これは、ドキュメントを見ても明らかではありません (ContactsContract.Groups には、SyncColumns にあるこれらの名前のフィールドはありません)。 . これら 2 つの値でグループを作成すると、同期プロセスによって 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 つのグループを作成した後、1 つはコードで、もう 1 つは手動で行い、これらの列を使用してグループをクエリします。
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) には、ContactsContract.SyncColumns の列としてリストされているソース ID がありますが、コードで生成されたグループには null があります。
Android ドキュメントの多くの場所に source_id への参照がありますが、それを取得する方法がわかりません。
グループをアカウントに関連付けると、どういうわけかこれを取得できると思います。グループでアカウントを関連付ける方法、またはこのソース ID フィールドを設定する方法を知っている人はいますか?