Android-将生日设置为现有联系人

时间:2018-12-21 12:24:11

标签: android android-contacts contactscontract

我正在尝试将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())

但是以上方法均无效,有帮助吗?

1 个答案:

答案 0 :(得分:0)

首先,您的方法updateBirthdate有一个错误,如果您的联系人为其设置了多个事件,例如生日,周年纪念日等,则您的代码将覆盖所有这些事件。

您应该查询以找到保存该事件的特定原始联系人,并仅更新该特定原始联系人(将Data.RAW_CONTACT_ID =?添加到您的选择)。

在更新当前没有生日的现有联系人时,您可以将update更改为insert,但是withValueBackReference行仅在您当前正在创建一个新的原始联系人,我认为您没有。 因此将其更改为常规的withValue并添加到您要为其添加生日的原始联系人的ID

相关问题