ERP system
と電話でsync adapter
〜sync contacts
を開発中です。 エミュレータではすべて正常に動作しますが、電話では「手で」作成された既存の連絡先に新しい電話番号が割り当てられます。新しい連絡先をアンドロイドの連絡先に挿入するときに電話番号が既存の連絡先に添付されます
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 = batch.size()のrawContactInsertIndexをインクリメントうか?
電話からすべての連絡先を手動で削除し、バックアップから.vcfをインポートしてから、同期アダプタをインストールして問題が解決しました。私が理解する限り、私は連絡先に孤児をいくつか持っていました。 –