java - Android删除的联系人重新出现而WhatsApp联系人不出现

标签 java android android-contacts whatsapp contactscontract

我正在添加联系人

ops.add(ContentProviderOperation.newInsert(
    ContactsContract.RawContacts.CONTENT_URI)
    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
    .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.FAMILY_NAME, contactName)
    .build());

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, newPhone)
    .build());

然后用

删除它们
ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI)
    .withSelection(ContactsContract.RawContacts._ID + "=?", new String[]{idRawContact}).build());

在调试时,我发现了两个问题,因为我重新插入了相同的已删除名称+号码:

1) “标准”联系人电话应用程序开始为每个应用程序列出几个相同的条目。

2) 拥有 WhatsApp 帐户的号码出现在 WhatsApp 应用程序中,但它们不在联系人电话应用程序的 WhatsApp 帐户选择中(而在第一次插入号码时已添加到该列表中)- 而且(显然?)他们停止通过以下方式选择(仅选择已删除的实体):

Cursor curRawContacts = contentResolver.query(ContactsContract.RawContacts.CONTENT_URI, null,
    ContactsContract.RawContacts.ACCOUNT_TYPE + " = ? ", new String[]{"com.whatsapp"}, null);

请告知是否可以采取任何措施来解决这个问题 - 也许从除 rawcontacts 之外的表中删除数据? rawcontacts 中的条目是否可以永久删除(不仅设置 ContactsContract.RawContacts.CONTACT_ID = null)?

此外,哪些联系人管理应用程序可以按帐户/类型(google、whatsapp、sim1 等)选择条目 - 我的一部手机有这样的手机,其他手机没有,我在 Google Play 上找不到这样的手机。

最佳答案

你需要使用

ContactsContract.RawContacts.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build()

代替

ContactsContract.RawContacts.CONTENT_URI

关于java - Android删除的联系人重新出现而WhatsApp联系人不出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35798790/

相关文章:

java - PMD 和 FindBugs 冲突

android - 搜索联系人并从 android 中的电话联系人中获取联系电话

android - RxJava如何过滤子树然后返回树

android - 有没有好的安卓图表库?

android - 非法参数异常 - DrawerLayout 必须使用 MeasureSpec.EXACTLY 进行测量

android - 如何在 android 中以编程方式导入多个 .vcf 文件?

android - 如何显示和处理应用程序的联系方式 Intent ?

java - 如何使用 CDI 集成将 robots.txt 添加到 Vaadin 7 应用程序?

java - 如何根据请求有效负载将请求与 Java EE 应用程序中的 HttpSession 相关联?

java - Spring 和 AOP - 处理每个抛出的异常