Android Contacts Contract:是否可以获取数据行的唯一ID?

Android Contacts Contract: Is it possible to get unique id of data row?

所以我现在知道联系人保存在三个 table 中:

我用的table:

我正在使用数据 table 来读取用户的所有 phone 号码,根据并感谢@marmor .

我从上面的解决方案中得到了什么link:

使用@marmor 在上面 link 中提供的答案,我能够查询(对于 phone 书中的所有联系人)映射到 [=12 的 contact_id =] 此特定联系人。

定义 contact_id 和一组 phone 数字:

问题:

假设我有两个用户 X 和 Y:

用户 x 有一个 contact_id = 0。

用户 y 有 contact_id = 1.

现在假设用户 x 有这些号码 linked:+1111-xxx 和 +2222-xxx

假设用户 y 拥有这些号码 linked:+3333-xxx 和 +2222-xxx

现在我决定将所有这些数字保存到 phone 上的本地数据库:

案例 1:

如果我使用这些用户的号码作为主ID存入数据库,那么用户x中的+2222-xxx将覆盖用户y中的+2222-xxx。

案例2:

如果我使用contact_id作为主ID存入数据库那么对应于相同user_id(0)的+1111-xxx和+2222-xxx都会被覆盖所以一个会赢。

案例3:

如果使用 phone 数字 + contact_id 的组合作为主要 ID 保存到数据库中,那么它可能会工作,但似乎不是非常干净的解决方案而不是 stable .

问题:

是否可以获得一个唯一的 ID 来标识在 contact_id 中找到的每个号码?

谢谢。

一个。肯定可以得到一个Data row id:

查询 Data.CONTENT_URI 时,只需将 Data._ID 添加到您的投影中,然后您就可以获取特定的数据 ID 并用它做任何您想做的事情。

乙。将数据 ID 作为 contact/number 组合的键保存到数据库中是否明智?编号

数据 ID 会随时间变化,并且不能保证一致,因此强烈建议不要将其保存到本地数据库中,并将其用作长运行ning 标识符。

C。你可以做什么?

使用 E164 phone 号码作为密钥,因为这是无法更改的静态内容,联系人可能会获得或失去 phone 号码及其联系信息,但是 phone号码还是原来的phone号码。

只需在您的密钥(phone 号码)和联系人之间建立一对多连接。 因此,单个 phone 号码 X 可以指向 0 个或多个 当前 在其数据行中具有该号码的不同联系人。

您需要运行定期(例如每天一次)使用设备联系人数据库中的更改来刷新您的内部数据库。