我正在开发sync adapter
至sync contacts
,电话号码为ERP system
。 一切工作正常在模拟器上,但在手机上,我得到了新的电话号码附加到已有的“手工”创建的联系人。将新联系人插入Android联系人时,电话号码附加到现有联系人
int rawContactInsertIndex =0;
// Add new items http://techblogon.com/insert-new-contact-in-android-code-example/
for (RestAPIContactParser.Entry e : entryMap.values()) {
rawContactInsertIndex = batch.size();
...
batch.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.SOURCE_ID, e.code)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, ACCOUNT_TYPE)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, ACCOUNT_NAME)
rawContactInsertIndex)
.build());
... batch.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, e.phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)
.build());
当我删除我的帐户联系人时,插入的电话号码也从现有联系人中删除。 我甚至在模拟器上创建了一个新的联系人,然后尝试同步,并且一切正常,新的电话号码未连接到旧的联系人。 任何想法?编辑: :它不清楚RawContacts表的数据库结构是什么。应像做
rawContactInsertIndex =max(ContactsContract.Data.RAW_CONTACT_ID)+1
,然后递增rawContactInsertIndex而不是rawContactInsertIndex = batch.size()?
我已经手动删除了手机中的所有联系人,然后从备份中导入.vcf,然后安装了我的同步适配器,问题消失了。据我了解,我在联系人中有一些孤儿。 –