如何通过电子邮件地址列表查询联系人
how to query contact by a list of email addresses
想从设备获取联系人。
在源代码中,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");
CONTENT_LOOKUP_URI
works with the contacts column LOOKUP_KEY
以防同步后联系人的 _id
发生变化。因此,如果您没有将此密钥存储在某处,则此 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);
处理电子邮件地址时要小心。大小写和点之类的东西可能很重要,应该考虑(必要时),但如果您不属于这些情况,那么上述方法应该可以正常工作。要忽略大小写,只需将 COLLATE NOCASE
添加到 selection
参数。
想从设备获取联系人。
在源代码中,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");
CONTENT_LOOKUP_URI
works with the contacts column LOOKUP_KEY
以防同步后联系人的 _id
发生变化。因此,如果您没有将此密钥存储在某处,则此 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);
处理电子邮件地址时要小心。大小写和点之类的东西可能很重要,应该考虑(必要时),但如果您不属于这些情况,那么上述方法应该可以正常工作。要忽略大小写,只需将 COLLATE NOCASE
添加到 selection
参数。