![](/img/trans.png)
[英]Android: adding a birthday event to an android contact programmatically
[英]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())
但是以上方法均無效,有幫助嗎?
首先,如果您的聯系人為它設置了多個事件(例如生日,周年紀念日等),則方法updateBirthdate
有一個錯誤。您的代碼將覆蓋所有這些事件。
您應該查詢以查找保存該事件的特定原始聯系人,並僅更新該特定原始聯系人(將Data.RAW_CONTACT_ID =?添加到您的選擇中)。
在更新當前沒有生日的現有聯系人時,您可以將update
更改為insert
但是withValueBackReference
行僅在您當前正在創建新的原始聯系人時才起作用,我認為您不會。 因此將其更改為常規的withValue
並添加到您要向其添加生日的原始聯系人的ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.