我有使用联系人姓名作为选择项从Android获取联系人信息的代码。但是,数据源(我想应该是ContactsContract.Contacts)没有我需要的关于联系人的所有信息。我看到联系信息被分为几个表(ContactsContract.CommonDataKinds.StructuredName,ContactsContract.CommonDataKinds.Phone等)。我还注意到,所有这些源都可以访问LOOKUP_KEY字段。它唯一地标识联系人。我想知道是否可以使用LOOKUP_KEY在这些数据源上执行联接。
下面,我目前为单个数据源设置投影和选择,并使用游标加载器异步查询它。有没有一种方法可以使用LOOKUP_KEY一次搜索多个数据源?
private static final String[] CONTACT_PROJECTION = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.LOOKUP_KEY,
ContactsContract.Contacts.DISPLAY_NAME_PRIMARY,
ContactsContract.Contacts.HAS_PHONE_NUMBER
};
private static final String CONTACT_SELECTION = ContactsContract.Contacts.DISPLAY_NAME_PRIMARY
+ " LIKE ?";
public static Loader<Cursor> getContactLoader(Context applicationContext, String searchString) {
String[] selectionArgs = new String[1];
selectionArgs[0] = "%" + searchString + "%";
return new CursorLoader(
applicationContext,
ContactsContract.Contacts.CONTENT_URI,
CONTACT_PROJECTION,
CONTACT_SELECTION,
selectionArgs,
null
);
}
答案 0 :(得分:0)
所有联系人的所有信息都分组在别名表中,别名表实际上存储在名为Data
的单个大表中,因此您可以简单地在该表中查询与特定联系人有关的所有信息(您可以使用{ {1}},无需麻烦的CONTACT_ID
,就像这样:
LOOKUP_URI