我一直在尝试复制一些有关联系人匹配的 OEM 拨号器应用程序行为,但运气不佳。基本上,我想填充一个潜在联系人匹配列表,因为用户在拨号器中键入与电话号码和姓名匹配的输入条目,就像大多数电话一样。例如,在拨号器中输入 323 将匹配 NUMBER 中任意位置具有 323 的联系人,例如 (323)123-4567 以及具有爸爸或 Daffy 的 DISPLAY_NAME 的联系人等。
我知道 ContactsContract.PhoneLookup.CONTENT_FILTER_URI 应该用于匹配电话号码而忽略格式(因此查询该 uri 针对 5551234567 将返回其号码存储为 (555)123-4567 的联系人)。问题是我无法让它与部分数字一起使用,因此即使我添加带有 LIKE 子句和通配符的选择参数,查询 5551 也会包含相同的结果。如果我使用任何其他 URI,带有 LIKE 的选择 arg 将返回部分结果,但格式会搞砸,因此 5551 不匹配,只有 555)1 匹配。 谁能解释我如何在忽略单个查询的格式时获得部分数字匹配? 其他使用多个查询的尝试被证明太慢了,并且不能提供我在大多数手机上看到的体验(我注意到 Android 源中的股票拨号器不进行联系人匹配,只进行搜索,所以没有帮助)。
其次,对于事物的名称部分,我有一个可行的解决方案,尽管我不确定这是最好的策略。我曾希望使用 ContactsContract.Contacts.CONTENT_FILTER_URI,因为文档说这是您应该如何过滤结果以获取键入建议的结果,但同样只适用于单个部分名称的 alpha 搜索,而我需要翻译 323 以搜索相关键盘字母(dad、dae、daf、ead、eae、eaf、fad 等)的所有组合的部分匹配。相反,我使用了 ContactsContract.CommonDataKinds.Phone.CONTENT_URI 和选择参数,使用 LIKE 来匹配所有可能性,然后后续请求根据上一个请求返回的联系人 ID 缩小字段。 有没有办法利用 ContactsContract.Contacts.CONTENT_FILTER_URI 进行这种类型的数字模式匹配? 我没有尝试将其分解为多个请求,但根据我在尝试上述部分数字匹配时遇到的延迟,我怀疑它不会很好地工作。
非常感谢任何建议!
谢谢,斯科特