问题描述
我正在尝试从 android 联系人表中获取已删除的联系人。
在搜索了许多 so 链接后,获取已删除联系人的最佳方法是使用 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);
你能告诉我我哪里做错了吗?
解决方法
当联系人从主 Contacts
表中删除时,它显然会从该表中删除,因此该联系人不会出现在联系人应用程序中用户正在使用他们当前联系人的视图。
因此您只能在 DeletedContacts
表中获取已删除联系人的详细信息。