4

次のコードを使用して、同じ連絡先をAndroidエミュレーター(2.3.3)に2回挿入しています。

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
   .withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT)
   .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
   .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());

// structuredname
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
   .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
   .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
   .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Test")
   .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, "Tester")
   .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "Test")
   .build());

// PHONE
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
   .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
   .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
   .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, "0")
   .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "12345678").build());

try {
  getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
  e.printStackTrace();
} catch (OperationApplicationException e) {
  e.printStackTrace();
}

私の理解によると、Androidは通常、連絡先を自動的に集約し、2つの挿入物のうち1つのエントリを作成する必要があります。ただし、これは発生しません。ダイヤラアプリで同じデータを持つ2つの連絡先を確認できます。

何か案は?

4

2 に答える 2

1

集計は、異なるアカウントから挿入された連絡先間でのみ機能します。同じアカウントから 2 つの生の連絡先を挿入すると、それらは集約されません。

于 2013-02-13T17:55:23.923 に答える
0

こんにちは @nr1 既存の連絡先にカスタム タイプを追加する同様のコードで同じ問題が発生しました。連絡先に同じデータを 2 回追加すると、データが分離されることに気付きました。

APIドキュメントが言うように:

自動集計は永続的ではありません。構成要素である未加工の連絡先が変更されると、新しい集計が作成されるか、既存の集計が分割される場合があります。

理由はわかりませんが、常にそうです。何度も行うと、データのある空の連絡先が作成されます(私の場合)。

カスタムデータが再度追加されないように、連絡先が既に存在するかどうかを確認しています。

于 2012-05-31T16:49:49.373 に答える