Ich versuche, für jede Telefonnummer, die allen Kontakten in der Android-Kontaktliste zugeordnet ist, unformatierte Kontakte hinzuzufügen. Wenn bestimmten Kontakten mehrere Telefonnummern zugeordnet sind, zeigt die Android-Kontaktliste den gleichen Kontakt mehrmals an. Ich möchte diese neu hinzugefügten Rohkontakte (basierend auf der Telefonnummer) aggregieren und unter diesem Kontakt anzeigen.Kontakte werden beim Hinzufügen eines unverarbeiteten Kontakts basierend auf der Telefonnummer dupliziert.
Was ich tat, ist, abgefragt ich alle Kontakte im Gerät zur Liste von unten URI ContactsContract.Contacts.CONTENT_URI
erneut abgefragt alle Telefonnummern von jedem der durch die Ausführung über Abfrage zurück Kontakte mit dem URI
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
Anschließend wird ClsContactList class objects
für jeden Kontakt erstellt, der den Anzeigenamen des Kontakts und ein Array von Telefonnummern enthält, die diesem Kontakt zugeordnet sind. Schließlich werden diese Objekte zu einer Liste und für jedes Objekt in der Liste hinzugefügt, die als angehängte Funktion zum Erzeugen eines Rohkontakts bezeichnet wird.
private static void addContact(Account account, ClsContactList ObjContact) {
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = operationList.size();
for (String phoneNumber : ObjContact.PhoneNumbers) {
operationList.clear();
//Creating raw contact
ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
builder.withValue(RawContacts.ACCOUNT_NAME, account.name);
builder.withValue(RawContacts.ACCOUNT_TYPE, account.type);
builder.withValue(ContactsContract.RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT);
//builder.withValue(RawContacts.SYNC1, ObjContact.getDisplay_name());
operationList.add(builder.build());
//INSERT NAME
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex);
builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, ObjContact.getDisplay_name());
operationList.add(builder.build());
//INSERT MOBILE
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex);
builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber); // Number of the person
//builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
operationList.add(builder.build());
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex);
builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.org.c99.SyncProviderDemo.profile");
builder.withValue(ContactsContract.Data.DATA1, "VOIP Call ("+phoneNumber+")");
builder.withValue(ContactsContract.Data.DATA2, "Dialer App");
builder.withYieldAllowed(true);
operationList.add(builder.build());
try {
mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Bitte werfen Sie einen Blick auf den beigefügten Screenshot. Vielen Dank im Voraus.
Raw Kontakte in Kontaktdaten Aktivität
Kontakte in Android-Kontaktliste
Vielen Dank für Ihre Antwort. In meinem Fall ist das Problem die Verdopplung des Kontakts beim Hinzufügen des rohen Kontakts. Wie im beigefügten Screenshot wurde Contact mit dem Namen "Aaaaaa" dupliziert, da er zwei Telefonnummern hat. Hier versuche ich, rohe Kontakte für jede Telefonnummer hinzuzufügen, die mit "Aaaaaa" verknüpft ist. –