android - 使用 ContentProviderOperation 更新和插入联系人

标签 android

我在 Android 2.0+ 上遇到了更新/插入联系人的问题。 电话簿为空时插入新联系人没有问题但是 当我第二次这样做时,一些像 TEL、EMAIL 这样的文件被加倍并跳闸等。 但 N、FN、ORG 都可以(一份)。

在得到这个论坛其他成员的建议后,我先更新了一个联系人,然后 ContentProviderResult[] 返回了带有 null 的 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());
  }

这个解决方案有什么问题?聚合引擎如何工作?

我很乐意提供帮助。

假的

最佳答案

如果您想进行更新,您必须为每个 ContentProviderOperation 提供一个 where 子句,参见 herehere .

关于android - 使用 ContentProviderOperation 更新和插入联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2956633/

相关文章:

java - 如何在应用程序启动时自动加载RecyclerView?

android - 主菜单按钮的最佳 Activity 堆栈顺序?

android - 如何在Android中做出这样的摆动效果? (见视频)

android - 来自 Keras 的卡住模型在恢复后无法预测

android - 如何在android中编写滚动游戏相机?

android - Android中的代码解释

java.lang.ClassCastException : java. util.ArrayList 无法转换为 Firebase 实时数据库中的 java.util.Map

java - 我应该在 Spring 和 Android 中使用一种 Java 模型表示吗?

android - 无法使用 ACTION_PICK Intent 选择特定图像

android - 在 Android 中使用 PhoneGap 选择图像/视频