0

我尝试同步 android 联系人。我想使用名字和姓氏来识别联系人并使用 raw_id 更新它,但我不知道如何搜索姓氏和姓氏。我查看了示例文件,但只有用于搜索(和同步)raw_id 的描述!

4

2 回答 2

1

作为单独字段的“家庭”名称不是联系人表的一部分。

Contacts 表中的行由提供程序自动生成。通常,一个联系人行聚合 ContactsContract.RawContacts 中的一个或多个原始联系人。每个原始联系人都有一个包含姓氏的 StructuredName 行。

要执行您描述的搜索,请在 FAMILY_NAME 和 GIVEN_NAME 上搜索 ContactsContract.CommonDataKinds.StructuredName。提供一个包含 LOOKUP_KEY 的投影,它是您想要的 ContactsContract.Contacts 行的“永久”链接。

唉,这仅基于文档。LOOKUP_KEY应该是对 StructuredName 的查询可用的列的一部分,但我已经看到文档与实现不匹配的其他情况。显然,开发人员有时会包含一个已实现的列名列表,但实际上似乎并没有实现返回它们。

此外,原始响应使用了 getContentResolver()。请尽可能使用 CursorLoader。

于 2013-01-15T19:35:04.183 回答
0

只需使用查询命令的选择参数。

Cursor cursor = Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, ContactsContract.Contacts.DISPLAY_NAME + "=" + familyName, null, null); 

然后遍历您的光标并查找 id:

String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 

您还可以创建一个完整的 DataSource 类并使调用更容易。

于 2013-01-15T18:54:34.667 回答