[英]What is the correct way to update a list of contact phone numbers in Android?
我想创建一种更新联系人的方法,包括其名称(结构化)和电话号码列表。
结构名称部分没有任何问题,但是我不确定联系电话号码列表。 它表示为字符串列表。 这是我目前所拥有的:
val phonesSelection = "${ContactsContract.CommonDataKinds.Phone.CONTACT_ID}=? AND ${ContactsContract.Data.MIMETYPE}=?"
val phoneArgs = arrayOf(
entity.phoneContactId.toNotNullable().toString(),
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
)
val phoneUpdateOperationProvider = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(phonesSelection, phoneArgs)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, entity.phones)
.build()
try {
contentResolver.applyBatch(
ContactsContract.AUTHORITY,
arrayListOf(
nameUpdateOperationProvider,
phoneUpdateOperationProvider
)
)
} catch (ex: Exception) {}
保存联系人列表的这种方法是否正确,还是有另一种方法?
Phone.NUMBER
接受一个字符串,您不能将其设置为电话号码列表,而是每个电话需要一个单独的Data
条目。
另外,假设您要修改的联系人已经有一个可以修改的电话号码,不一定是这样,我假设entity.phones.size与当前存储的电话号码不同联系人,您需要根据需要删除/插入。
另外,还在选择Phone.CONTACT_ID}=?
上运行更新Phone.CONTACT_ID}=?
会将所有手机更新为相同的值,这不是您想要执行的操作。
如果要完成将现有电话替换为新电话的操作,建议删除所有现有电话,然后添加所有新电话。
另一个问题是,联系人的所有数据都存储在特定的RawContact上,这是由某些服务应用程序同步的联系人的一部分,例如,一个联系人可以有2个RawContacts,一个从Google同步,另一个从Yahoo同步。 。 您需要确定要存储手机列表的RawContact,它可以在该联系人已经存在的某些现有RawContact上,也可以在为您的应用创建的新RawContact上。
val rawContact = // find the RawContact in which you want to insert your phones!!
val ops = arrayListOf(nameUpdateOperationProvider)
val phonesSelection = "${ContactsContract.CommonDataKinds.Phone.CONTACT_ID}=?"
val phoneArgs = arrayOf(entity.phoneContactId.toNotNullable().toString())
// note we're running on Phone.CONTENT_URI, so no need to limit MIMTETYPE
val phonesDelete = ContentProviderOperation.newDelete(ContactsContract.Phone.CONTENT_URI)
.withSelection(phonesSelection, phoneArgs)
.build()
ops.add(phonesDelete)
entity.phones.forEach {
val addPhone = ContentProviderOperation.newInsert(ContactsContract.Phone.CONTENT_URI)
.withValue(Phone.RAW_CONTACT_ID, rawContact)
.withValue(Phone.NUMBER, it)
.build()
ops.add(addPhone)
}
try {
contentResolver.applyBatch(ContactsContract.AUTHORITY, ops)
} catch (ex: Exception) {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.