Android 保证引用联系人
Android Guaranteed Reference to a Contact
我有一个应用程序需要维护对设备上某些联系人的持久引用。我曾经通过存储 ContactsContract.Contact._ID
来做到这一点,但我最近遇到了 _ID
会发生变化的问题,我无法再引用联系人。
我转而使用 ContactsContract.Contact.LOOKUP_KEY
,我认为这是一种独特的、持续的引用联系人的方式。但是,我收到报告称某些设备上的某些联系人的 LOOKUP_KEY
为 null
。
我对LOOKUP_KEY
的理解有误吗?
- 可以为空吗?
- 能改吗?
- 如果对 1 或 2 的回答是肯定的,是否有保证存储联系人参考的方法?
在联系人数据库中,我们有许多 table 用于保存与联系人相关的信息,例如 Contacts
、 Data
、 Mimetype
、 RawContacts
, Accounts
等
ContactsContract.Contact._ID
在更新、合并或同步到服务器时发生变化,ContactsContract.Contact._ID
会不时发生变化,您需要使用ContactsContract.RawContacts._ID
,这将是独一无二,除非删除联系人,否则不会更改。
ContactsContract.Contact.LOOKUP_KEY 将不会更改,直到您加入另一个联系人或分离合并的联系人。或者您可以使用 Contacts table 中的列 "name_raw_contact_id",它将始终保持不变。
我有一个应用程序需要维护对设备上某些联系人的持久引用。我曾经通过存储 ContactsContract.Contact._ID
来做到这一点,但我最近遇到了 _ID
会发生变化的问题,我无法再引用联系人。
我转而使用 ContactsContract.Contact.LOOKUP_KEY
,我认为这是一种独特的、持续的引用联系人的方式。但是,我收到报告称某些设备上的某些联系人的 LOOKUP_KEY
为 null
。
我对LOOKUP_KEY
的理解有误吗?
- 可以为空吗?
- 能改吗?
- 如果对 1 或 2 的回答是肯定的,是否有保证存储联系人参考的方法?
在联系人数据库中,我们有许多 table 用于保存与联系人相关的信息,例如 Contacts
、 Data
、 Mimetype
、 RawContacts
, Accounts
等
ContactsContract.Contact._ID
在更新、合并或同步到服务器时发生变化,ContactsContract.Contact._ID
会不时发生变化,您需要使用ContactsContract.RawContacts._ID
,这将是独一无二,除非删除联系人,否则不会更改。
ContactsContract.Contact.LOOKUP_KEY 将不会更改,直到您加入另一个联系人或分离合并的联系人。或者您可以使用 Contacts table 中的列 "name_raw_contact_id",它将始终保持不变。