簡體   English   中英

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())

但是以上方法均無效,有幫助嗎?

首先,如果您的聯系人為它設置了多個事件(例如生日,周年紀念日等),則方法updateBirthdate有一個錯誤。您的代碼將覆蓋所有這些事件。

您應該查詢以查找保存該事件的特定原始聯系人,並僅更新該特定原始聯系人(將Data.RAW_CONTACT_ID =?添加到您的選擇中)。

在更新當前沒有生日的現有聯系人時,您可以將update更改為insert但是withValueBackReference行僅在您當前正在創建新的原始聯系人時才起作用,我認為您不會。 因此將其更改為常規的withValue並添加到您要向其添加生日的原始聯系人的ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM