Android - установите день рождения для существующего контакта - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь назначить день рождения провайдеру контактов 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 голосов
/ 22 декабря 2018

Во-первых, ваш метод updateBirthdate имеет ошибку, если у вас есть контакт, для которого установлено несколько событий, например, день рождения, годовщина и т. Д., Ваш код переопределит все из них.

вам следуетвместо этого отправьте запрос, чтобы найти конкретный raw контакт, в котором сохранено это событие, и обновите только этот конкретный необработанный контакт (добавьте Data.RAW_CONTACT_ID =? к вашему выбору).

при обновлении существующегодля контакта, у которого в настоящее время нет дня рождения, вы можете изменить update на insert, однако строка withValueBackReference будет работать только в том случае, если вы в настоящее время создаете новый необработанный контакт, что, как я полагаю, вам не нужно,поэтому замените его на обычный withValue и добавьте к идентификатору необработанного контакта, который вы пытаетесь добавить в день рождения

...