【问题标题】:When deleting a contact on android, other random contacts id's being changed在 android 上删除联系人时,其他随机联系人 id 正在更改
【发布时间】:2020-01-17 16:33:17
【问题描述】:

我正在尝试将用户电话号码同步到 Firestore。它似乎有效,但是当我从手机中删除一个联系人时,似乎其他一些联系人 ID 正在被替换,导致不必要的删除和创建到 firestore。我唯一的线索是这些联系人大多在 120,000 左右。正常吗?怎么回事?

这是我获取新创建的联系人的方式,lcid 是注册到 firestore 的最后一个联系人 ID:

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

接下来是一个日志示例。当我删除一个联系人时,它会被识别为已删除,但其他随机联系人也会替换他们的 ID(我没有提到日志名称)

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

【问题讨论】:

    标签: android android-contacts


    【解决方案1】:

    从文档和文章看来,android 有时可以更改联系人 ID,这非常奇怪且出乎意料,但经过我数周并尝试解决此问题后才有意义。

    据我所知,原因是多种多样的,所以我也可以猜测,当一次更改或删除联系人可以更改其他联系人 ID 时。

    似乎要克服,我需要使用`LOOKUP_KEY,我还不明白如何。

    一些文件包括:

    Detecting changes in android contacts

    Check if contact has been changes on...

    LOOKUP_KEY

    希望它有所帮助,因为 android 文档很难理解

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2011-11-30
      • 2011-08-11
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      相关资源
      最近更新 更多