Я столкнулся с проблемой updating/insertng контакты на Android 2.0 +. Нет никакой проблемы для вставки нового контакта, когда телефонная книга пуста, но когда я сделал это в 2-й раз некоторые поля как ТЕЛЕФОН, ЭЛЕКТРОННАЯ ПОЧТА удвоена и сместилась и т.д., но N, FN, ORG в порядке (одна копия).
После получения и совета другого участника этот форум я обновил контакт сначала, и затем ContentProviderResult [] возвратил uri с пустым указателем затем, я делаю действие вставки, и это пошло хорошо, но после этого я сделал обновление, и все контакты агрегированы в один - я получил 1 insted 3 контакта, который существовал в телефонной книге. Этот был поврежден, поля контакта случайным образом создаются.
Я установил учетную запись Google.
Код:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newUpdate(ContactsContract.RawContacts.CONTENT_URI)
.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
.build());
// add name
ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
builder.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME, name);
// phones
ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
builder.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneValue);
builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, phoneType);
builder.withValue(ContactsContract.CommonDataKinds.Phone.LABEL, phoneLabel);
ops.add(builder.build());
// emails ...
// orgs ...
try {
ContentProviderResult[] result = mContentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
}
} catch (Exception e) {
Log.e(LOG_TAG, "Exception while contact updating: " + e.getMessage());
}
Что не так в этом решении? Как действительно работает механизм агрегирования?
Я буду радоваться за справку.
Поддельный