希望从设备中获取联系人。
在源代码中,CONTENT_LOOKUP_URI用于查找一封电子邮件。 如果我有电子邮件列表,并想查询此电子邮件列表中的联系人怎么办?
/**
* <p>
* The content:// style URL for looking up data rows by email address. The
* lookup argument, an email address, should be passed as an additional path segment
* after this URI.
* </p>
* <p>Example:
* <pre>
* Uri uri = Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(email));
* Cursor c = getContentResolver().query(uri,
* new String[]{Email.CONTACT_ID, Email.DISPLAY_NAME, Email.DATA},
* null, null, null);
* </pre>
* </p>
*/
public static final Uri CONTENT_LOOKUP_URI = Uri.withAppendedPath(CONTENT_URI,
"lookup");
答案 0 :(得分:2)
CONTENT_LOOKUP_URI
适用于联系人列LOOKUP_KEY
,以防联系人_id
在sych后发生更改。因此,如果您没有将此密钥存储在某处,则此uri对您没用。使用电子邮件作为密钥可能会或可能不会起作用,具体取决于用作查找键的内容。
如果您确实存储了查找键,那么这应该是您对键列表的查询
List<String> keys;
for(String key : keys){
Cursor cursor = getContentResolver().query(
Uri.withAppendedPath(ContactsContract.CommonDataKinds.Email.CONTENT_LOOKUP_URI, "/" + key),
null, null, null, null);
}
如果您拥有的只是电子邮件地址,那么最好的方法就是
List<String> emails;
String[] questionMarks = new String[emails.size()];
Arrays.fill(questionMarks,"?");
Cursor cursor = getContentResolver().query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.DATA + " IN (" + TextUtils.join(",", questionMarks) + ")",
emails.toArray(new String[emails.size()]), null);
在处理电子邮件地址时要小心。像case和dots这样的东西可能很重要,应该考虑(必要时)但是如果你不属于这些情况,那么上面的方法应该可以正常工作。要忽略大小写,只需将COLLATE NOCASE
添加到selection
参数。