0

アップデート

私は最終的にこれを理解しました: 重要なのは、アカウント名とアカウントの種類を使用してグループを作成することです。これは、ドキュメントを見ても明らかではありません (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 フィールドを設定する方法を知っている人はいますか?

4

2 に答える 2

2

私は最終的にこれを理解しました: 重要なのは、アカウント名とアカウントの種類を使用してグループを作成することです。これは、ドキュメントを見ても明らかではありません (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);
于 2013-09-08T22:07:49.513 に答える
1

sourceid のデータは、取得する前に 2 番目の例で設定する必要があります。

sourceid に関するドキュメントの説明は次のとおりです。

文字列 SOURCE_ID 読み取り/書き込み:

ソース アカウントに対してこの行を一意に識別する文字列。通常、生の連絡先が挿入されたときに設定され、その後変更されることはありません。注目すべき例外の 1 つは、新しい raw 連絡先です。アカウント名とタイプ (および場合によってはデータ セット) はありますが、ソース ID はありません。これは、新しい連絡先をサーバー側で作成し、その ID を電話の対応する SOURCE_ID フィールドに格納する必要があることを同期アダプターに示します。

于 2013-09-07T15:02:52.427 に答える