【问题标题】:Unable to fetch deleted contacts from ContactsContract.Contacts.CONTENT_URI无法从 ContactsContract.Contacts.CONTENT_URI 获取已删除的联系人
【发布时间】:2021-09-04 19:04:36
【问题描述】:

我正在尝试从 Android 联系人表中获取已删除的联系人。在搜索了一些 Stack Overflow 链接后,获取已删除联系人的最佳方法是使用 ContactsContract.DeletedContacts。我能够从 DeletedContacts 表中获取已删除的联系人。

val deletedContactsProjection = arrayOf(ContactsContract.DeletedContacts.CONTACT_ID,ContactsContract.DeletedContacts.CONTACT_DELETED_TIMESTAMP)
val contactLastDeletedTimeStamp = SharedPreferenceManager.instance.getLongFromPreference("contact_sync_last_updated_timestamp")
val deletedContactSelection = ContactsContract.DeletedContacts.CONTACT_DELETED_TIMESTAMP + " > ?";
val deletedContactSelectionArgs = arrayOf<String>(contactLastDeletedTimeStamp.toString())
var deletedContactsCursor = context.contentResolver.query(ContactsContract.DeletedContacts.CONTENT_URI, deletedContactsProjection,deletedContactSelection, deletedContactSelectionArgs,null)

使用上面的光标,我可以获取最后删除的联系人。当我从光标中检查已删除联系人的 ContactsContract.DeletedContacts.CONTACT_ID 时,它与我删除的联系人 ID 相同。但问题是当我尝试使用 ContactsContract.DeletedContacts.CONTACT_ID 从 ContactsContract.Contacts 表中获取联系人时,它总是返回 null。

这是我正在使用的查询:

String[] contactNumberProjection = {ContactsContract.Contacts._ID};
String contactId = deletedContactsCursor.getString(deletedContactsCursor.getColumnIndex(ContactsContract.DeletedContacts.CONTACT_ID));
String contactSelection = ContactsContract.Contacts._ID + " = ?";
String[] contactSelectionArg = {contactId};
Cursor contactCursor =
context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,contactNumberProjection,contactSelection,contactSelectionArg,null);

我哪里错了?

【问题讨论】:

    标签: android kotlin contacts android-contacts


    【解决方案1】:

    当一个联系人从Contacts 主表中删除时,它显然会从该表中删除,因此该联系人不会出现在用户所在的联系人应用程序中使用查看他们当前的联系人。

    因此您只能在DeletedContacts 表中获取已删除联系人的详细信息。

    【讨论】:

    • 那么如何获取已删除联系人的手机号码和用户名等详细信息,我应该更改查询吗?因为deletedcontacts表除了contact id和contact deleted time之外不包含任何细节。
    • 你不能......它对同步联系人的应用程序更有用,这会让他们知道联系人 X 最近被删除并且他们应该同步删除。
    • 是的,我也需要同步我的联系人,但我没有使用同步适配器来同步联系人。因此,我可能需要循环联系人并检查已删除的联系人。如果我能够联系手机号码,然后我可以查询该号码并将其从我的应用程序数据库中删除。
    • 然后将联系人 ID 存储在本地数据库中,并使用它来找出最近删除的联系人。切勿使用电话号码或电子邮件作为唯一联系人的键!多个联系人可能共用同一个电话和/或电子邮件,您可能删除了错误的联系人
    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2015-05-23
    相关资源
    最近更新 更多