【发布时间】:2012-12-17 23:50:39
【问题描述】:
在我正在开发的 Android 应用程序中,我有一个用于映射的数据库:
--> 与联系人关联的我的自定义数据>
当收到 SMS 消息时,我希望能够查找与发送 SMS 消息的联系人关联的与联系人关联的自定义数据。我想以尽可能少的步骤进行查找。
我可以从 SMS 消息中获取的唯一数据是 电话号码,所以问题基本上是将 电话号码 映射到 我的自定义在尽可能少的步骤中与联系人关联的数据。
现在,我知道我可以使用 ContactsContract.PhoneLookup 从电话号码中查找联系人,如所述,例如here。但是,这并没有让我得到我想要的结果,因为联系人 ID 和联系人查找键都可能会发生变化。因此,如果我保存到数据库中的任何联系人的 ID 或查找键发生了变化,我基本上必须加载我的整个数据库并刷新每一行的 ID/查找键,然后才能测试它们是否代表相同的联系人ContactsContract.PhoneLookup 返回的那个。这是一个非常残酷的解决方案,我宁愿避免。
我想做的是保留一个表格,将电话号码映射到我的自定义数据(在 N:1 关系中)。
--> 我与联系人关联的自定义数据>
这样,至少在理论上,我可以索引电话号码列并且只需一步查找数据。但是,电话号码有多种格式。只有当我可以创建给定电话号码的规范表示时,我的解决方案才有效。我的计划是使用PhoneNumberUtils.getStrippedReversed 来生成一个有效的可索引规范电话号码,但这在一个微不足道的情况下会失败,例如:
PhoneNumberUtils.getStrippedReversed("+1(306)6656320") --> 02365566031 PhoneNumberUtils.getStrippedReversed("(306)6656320") --> 0236556603
它们不是同一个数字!
因此,通过冗长的解释,我的问题是:谁能想到一种将电话号码转换为规范电话号码的方法,以便我可以对号码执行索引数据库查找,或者我上面描述的问题的任何其他解决方案?
【问题讨论】:
标签: android contacts android-contacts