我开发了一个简单的联系人应用程序,还使用名称实现了搜索。但现在我想同时使用姓名和公司进行搜索(就像默认的 android 联系人应用程序一样)。我可以使用公司单独搜索,但无法获取其他联系信息,因为返回的联系人 ID 不同...我已在下面粘贴我的代码。
使用姓名搜索获取联系人 的代码:(搜索字符串是使用 textchangedlistener 从edittext 中获取的)
private Cursor getContactsByName(String temp) {
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME, };
String selection = ContactsContract.Contacts.DISPLAY_NAME + " like '"
+ temp + "%'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
}
使用公司搜索获取联系人 的代码:(搜索字符串是使用 textchangedlistener 从edittext 中获取的)
private Cursor getContactsByCompany(String temp) {
Uri uri = ContactsContract.Data.CONTENT_URI;
String[] proj = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME, Organization.COMPANY};
String selection3 = Data.MIMETYPE + "='" + Organization.CONTENT_ITEM_TYPE +
"' AND " + Organization.COMPANY + " like '" + temp + "%'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return managedQuery(uri, proj,
selection3, selectionArgs, sortOrder);
}
在第一种情况下(即姓名搜索),我得到一个带有联系人 ID、姓名等信息的光标。使用联系人 ID,我在查看联系人页面中显示联系人的信息,例如照片、电子邮件。
在第二种情况下(即公司搜索),我得到一个带有信息联系人 ID、姓名和公司的光标。但是这里为相同联系人返回的联系人 id 与第一种情况下返回的不同。因此,我无法使用此联系人 ID 获取联系人的其他信息,例如照片、电子邮件等。
如果在案例 1 和案例 2 中联系人的联系人 ID 相同,我可以通过删除重复项将这两个搜索整合为一个。但这里不是这种情况。
所以我的问题是,如果联系人 ID 不同,我如何从第二种情况中找到联系信息,以及如何将这两种搜索结合起来?