如何更新多个群组以在 android 上联系?
Posted
技术标签:
【中文标题】如何更新多个群组以在 android 上联系?【英文标题】:How to update multiple groups to contact on android? 【发布时间】:2021-11-15 12:07:01 【问题描述】:我刚刚成功地将多个组插入到一个联系人,但未能更新一个联系人的多个组。我的代码只更新了 1 个组,而不是所有 groupsId 列表(见下文)
private fun updateGroupOnContact(
operations: ArrayList<ContentProviderOperation>,
where: String,
args: Array<String>,
groupsId: Array<String>
)
val values = ContentValues()
groupsId.forEach
val newVal = ContentValues()
newVal.put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, it)
values.putAll(newVal)
operations.add(
ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(where, args)
.withValues(values)
.build()
)
我已经尝试过这段代码:
groupsId.forEach
operations.add(
ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(where, args)
.withValue(
ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, it
)
.build()
)
我成功创建新联系人与多个组的代码。
contentProvideOperation.add(
ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(
ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID,
groupID
)
.withValue(
ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE,
ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE
)
.build()
)
感谢任何帮助。
【问题讨论】:
【参考方案1】:实际上我插入的 id 联系人有误,我应该在这个函数中使用原始联系人 ID。
private fun getRawContactId(contactId: String): String?
val projection = arrayOf(RawContacts._ID)
val selection = RawContacts.CONTACT_ID + "=?"
val selectionArgs = arrayOf(contactId)
val c: Cursor = contentResolver?.query(
RawContacts.CONTENT_URI,
projection,
selection,
selectionArgs,
null
)
?: return null
var rawContactId = -1
if (c.moveToFirst())
rawContactId = c.getInt(c.getColumnIndex(RawContacts._ID))
c.close()
return rawContactId.toString()
然后插入它(用于添加联系人的组),而不是使用更新。 因为更新只是设置组只有1组。
private fun insertGroupOnContact(
operations: ArrayList<ContentProviderOperation>,
contactId: String,
groupId: String
)
ContentProviderOperation.newInsert(Data.CONTENT_URI).apply
withValue(Data.RAW_CONTACT_ID, getRawContactId(contactId))
withValue(GroupMembership.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE)
withValue(GroupMembership.GROUP_ROW_ID, groupId)
operations.add(build())
如果要清除上一个联系人的组并插入多个。它应该首先更新它(1组)以删除以前的组,然后插入其他组。
private fun updateGroupOnContact(
operations: ArrayList<ContentProviderOperation>,
where: String,
args: Array<String>,
groupId: String
)
operations.add(
ContentProviderOperation.newUpdate(Data.CONTENT_URI)
.withSelection(where, args)
.withValue(GroupMembership.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE)
.withValue(GroupMembership.GROUP_ROW_ID, groupId)
.build()
)
【讨论】:
以上是关于如何更新多个群组以在 android 上联系?的主要内容,如果未能解决你的问题,请参考以下文章
如何为联系人提供 UI 以在 CRM Dynamics 中更新他们的详细信息?