Android - 为现有联系人设置生日
Android - set birthday to an existent contact
我正在尝试将 android 联系人提供程序的生日设置为没有该字段的现有联系人,我尝试使用我用来更新联系人生日的方法已经设置了生日:
fun updateBirthdate(id: Long, birthdate: String) {
val list = ArrayList<ContentProviderOperation>()
val where = """${ContactsContract.Data.CONTACT_ID} = ?
AND ${ContactsContract.Data.MIMETYPE} = ?"""
val whereParams =
arrayOf(id.toString(), ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE)
list.add(ContentProviderOperation.newUpdate(
ContactsContract.Data.CONTENT_URI)
.withSelection(where, whereParams)
.withValue(ContactsContract.CommonDataKinds.Event.START_DATE, birthdate)
.withValue(ContactsContract.CommonDataKinds.Event.TYPE,
ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
.build())
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, list)
}
但是不行,我也试过插入新行:
list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Event.CONTENT_ITEM_TYPE)
.withValue(CommonDataKinds.Event.START_DATE, birthdate)
.withValue(CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
.build())
但是上面的none有效,有什么帮助吗?
首先,您的方法 updateBirthdate
有一个错误,如果您的联系人设置了多个事件,例如生日、周年纪念日等。您的代码将覆盖所有这些。
您应该改为查询以查找保存该事件的特定 raw 联系人,并仅更新该特定的原始联系人(将 Data.RAW_CONTACT_ID = ? 添加到您的选择)。
更新当前没有生日的现有联系人时,您可以将 update
更改为 insert
,但是 withValueBackReference
行只有在您'目前正在创建一个新的原始联系人,我假设你没有。
所以将其更改为常规 withValue
并添加到您尝试将生日添加到
的原始联系人的 ID
我正在尝试将 android 联系人提供程序的生日设置为没有该字段的现有联系人,我尝试使用我用来更新联系人生日的方法已经设置了生日:
fun updateBirthdate(id: Long, birthdate: String) {
val list = ArrayList<ContentProviderOperation>()
val where = """${ContactsContract.Data.CONTACT_ID} = ?
AND ${ContactsContract.Data.MIMETYPE} = ?"""
val whereParams =
arrayOf(id.toString(), ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE)
list.add(ContentProviderOperation.newUpdate(
ContactsContract.Data.CONTENT_URI)
.withSelection(where, whereParams)
.withValue(ContactsContract.CommonDataKinds.Event.START_DATE, birthdate)
.withValue(ContactsContract.CommonDataKinds.Event.TYPE,
ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
.build())
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, list)
}
但是不行,我也试过插入新行:
list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Event.CONTENT_ITEM_TYPE)
.withValue(CommonDataKinds.Event.START_DATE, birthdate)
.withValue(CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
.build())
但是上面的none有效,有什么帮助吗?
首先,您的方法 updateBirthdate
有一个错误,如果您的联系人设置了多个事件,例如生日、周年纪念日等。您的代码将覆盖所有这些。
您应该改为查询以查找保存该事件的特定 raw 联系人,并仅更新该特定的原始联系人(将 Data.RAW_CONTACT_ID = ? 添加到您的选择)。
更新当前没有生日的现有联系人时,您可以将 update
更改为 insert
,但是 withValueBackReference
行只有在您'目前正在创建一个新的原始联系人,我假设你没有。
所以将其更改为常规 withValue
并添加到您尝试将生日添加到