При удалении контакта на android другие идентификаторы случайных контактов меняются - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь синхронизировать c телефонные номера пользователей с пожарным. Кажется, это работает, но когда я удаляю контакт со своего телефона, кажется, что некоторые другие идентификаторы контактов заменяются, что приводит к ненужному удалению и созданию в firestore. Моя единственная подсказка в том, что эти контакты в основном около 120 000. Это нормально? Что такое goung?

Вот так я получаю новые созданные контакты, lcid - это последний контакт-идентификатор, зарегистрированный в firestore:

private fun getNewContacts(): Cursor? {
    val projection = arrayOf(
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.Contacts.HAS_PHONE_NUMBER)

    val selection = ContactsContract.Contacts._ID + "> ?"

    val selectionArgs = arrayOf(mFireContactDetails!!.lcid.toString())

    val sortOrder = ContactsContract.Contacts._ID + " ASC"

    return mContentResolver.query(
            ContactsContract.Contacts.CONTENT_URI,
            projection,
            selection,
            selectionArgs,
            sortOrder)
}

Так я получаю удаленные контакты, ldel_ms - это последняя удаленная временная метка, зарегистрированная в firestore:

private fun getDeletedContacts(): Cursor? {
    val projection = arrayOf(
            ContactsContract.DeletedContacts.CONTACT_ID,
            ContactsContract.DeletedContacts.CONTACT_DELETED_TIMESTAMP)

    val selection = ContactsContract.DeletedContacts.CONTACT_DELETED_TIMESTAMP + "> ?"

    val selectionArgs = arrayOf(mFireContactDetails!!.ldel_ms.toString())

    val sortOrder = ContactsContract.DeletedContacts.CONTACT_DELETED_TIMESTAMP + " ASC"

    return mContentResolver.query(
            ContactsContract.DeletedContacts.CONTENT_URI,
            projection,
            selection,
            selectionArgs,
            sortOrder)
}

Далее приведен пример журнала. Когда я удаляю контакт, он распознается как удаленный, но также и другие случайные контакты, заменяющие их идентификатор (я не упомянул имена журналов)

values retrieval success
new contacts detected
adding 120797
adding 120803
adding 120804
adding 120805
adding 120806
adding 120807
adding 120808
adding 120809
adding 120810
sync new contacts success
deleted contacts detected
deleting contact id: 119576
deleting contact id: 120798
deleting contact id: 120799
deleting contact id: 120800
deleting contact id: 120801
deleting contact id: 120802
deleting contact id: 119762
deleting contact id: 119700
deleting contact id: 119561
deleting contact id: 119613
sync deleted contacts success

1 Ответ

0 голосов
/ 20 января 2020

Из документации и статей кажется, что android иногда может изменить идентификатор контакта, это очень странно и неожиданно, но имеет смысл после многих недель и попыток решить эту проблему.

Из того, что я могу понять, причины весьма разнообразны, поэтому я могу догадаться и в моем случае, когда одно изменение или удаление контакта может изменить другие идентификаторы контакта.

Кажется, что для преодоления мне нужно использовать `LOOKUP_KEY, который я еще не понял, как.

Некоторые документы включают в себя:

Обнаружение изменений в android контакты

Проверьте, не изменился ли контакт на ...

LOOKUP_KEY

Надеется, что это поможет поскольку android документациям так трудно следовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...