連絡先に関連するデータを保存する必要があるアプリを開発しています。連絡先のデータを保存すると新しいものが追加されます
私はカーソルを使用してrecycleViewに連絡先をリストし、各itemViewには連絡先をお気に入りとして設定するためのスターボタンがあります(システムと同じではありません)。
が、私はこれをやって、ContactsContract.Data
にデータを格納するために管理:二つの接点がまったく同じ名前のEJを持っている場合
private void addContactData(long contactId, String displayName, boolean favorite) {
// displayName same as the value for Contacts.DISPLAY_NAME_PRIMARY
ArrayList<ContentProviderOperation> ops =
new ArrayList<>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, CUSTOM_ACCOUNT_TYPE)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, CUSTOM_ACCOUNT_NAME)
.withValue(ContactsContract.RawContacts.CONTACT_ID, contactId)
.build());
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, displayName)
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, CustomData.CONTENT_ITEM_TYPE)
.withValue(CustomData.IS_FAVORITE, favorite)
.build());
try {
ContentProviderResult[] contentProviderResults = cr.applyBatch(ContactsContract.AUTHORITY, ops);
return contactUri;
} catch (RemoteException | OperationApplicationException e) {
Log.e(getClass().getSimpleName(), e.getMessage(), e);
return null;
}
}
私が持っている問題があります。私がfavボタンを押すと "Tom"と "Tom"が、デバイスの連絡先アプリにリストされている3番目の連絡先を追加しています。
いくつかの検索には、使用して連絡先を区別するために、より多くのデータを追加するために私をguied:
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)
.build());
// OR
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.ADDRESS, email)
.build());
をそして、それはフィールドが両方の接点で対等であれば除いて、うまく働きました。この動作を避けるためには何が必要なのですか。このような操作を行うにはCONTACT_IDでは不十分なのはなぜですか?
が、これは私はまだ持っている唯一の問題は、SIMの連絡先である、作品、ありがとうございます。 WhatsAppのようなアプリケーションでも連絡先の複製が追加されているので、他の方法はないと思う。私はそれについていくつかのドキュメントを探していますが、まだ何も、とにかく助けてくれてありがとう。 – GLopez
ああ、sim連絡先は他の連絡先にマージすることはできません、それはSIM連絡先プロトコルの制限です – marmor