Ich baue eine App, wo Sie die Adresse eines beliebigen Punktes von Interesse für Ihre persönlichen Kontakte herunterladen können.Wie aggregieren Sie Kontaktdaten, wenn Sie versuchen, neue Kontakte hinzuzufügen?
Ich verwende diesen Code, um den Kontakt hinzuzufügen. Hab es hier bei Stackoverflow gefunden. ;)
ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());
//------------------------------------------------------ Names
if (title != null) {
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, title).build());
}
//------------------------------------------------------ Work Numbers
if (phone != null) {
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.NUMBER, phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_COMPANY_MAIN).build());
}
//------------------------------------------------------ Address
ops.add(ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, city)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, zip)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, street).build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
Das funktioniert gut, solange dieser Kontakt nicht existiert. Sonst fügt das Hinzufügen eines Eintrags weitere doppelte Einträge hinzu, auch wenn alle Daten identisch sind. Beim Lesen dieses article, vor allem der Teil über Aggregation, dachte ich, Android könnte das automatisch umgehen. Aber offensichtlich nicht für mich.
Gibt es eine einfache Möglichkeit, Android zu zwingen, den neuen Eintrag mit vorhandenen Einträgen zu aggregieren, wenn sie übereinstimmen?