【发布时间】:2014-02-06 23:22:14
【问题描述】:
我正在为自定义首选项编写 ContactPickerDialog。
根据偏好,ContactPickerDialog 应显示至少具有一个电话号码的所有联系人或具有至少一个电子邮件地址的所有联系人。无论有多少电话号码或电子邮件地址与此联系人关联,都不应显示两次联系人。
我可以通过至少一个电话号码获取所有联系人,因为我可以在 where 子句中使用 HAS_PHONE_NUMBER。但是我不知道如何获取具有至少一个电子邮件地址的联系人,而不需要多次获取一些联系人,如果他们有多个电子邮件地址。
这是我的代码:
public void LoadContactsWithTarget(Context context, PickContactDialog.PickTarget pickTarget)
{
try
{
String[] projection = new String[]
{
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.PHOTO_THUMBNAIL_URI,
ContactsContract.Contacts.PHOTO_URI,
ContactsContract.Contacts._ID
};
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " ASC";
Uri uri = null;
String where = "";
if (pickTarget == PickTarget.PHONE_NR)
{
// works great, I only get one contact, no matter how many phone-numbers are connected with this contact
uri = ContactsContract.Contacts.CONTENT_URI;
where = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1";
}
else if (pickTarget == PickTarget.EMAIL)
{
// I get one contact/entry for each eMail-address that is connected with the contact but I only want to get one contact, no matter how many eMail-addresse are connected with the contact
uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
where = ContactsContract.CommonDataKinds.Email.DATA + " NOT LIKE ''";
}
Cursor cursor = context.getContentResolver().query(uri, projection, where, null, sortOrder);
if (cursor.moveToFirst())
{
int iNameColumn = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
int iThumbnailColumn = cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI);
int iImageColumn = cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_URI);
int iIDColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);
while (!cursor.isAfterLast())
{
Contact contact = new Contact(cursor.getInt(iIDColumn),
cursor.getString(iNameColumn),
cursor.getString(iThumbnailColumn),
cursor.getString(iImageColumn));
_lstContacts.add(contact);
cursor.moveToNext();
}
}
cursor.close();
}
catch(Exception e) { }
}
非常感谢任何帮助
【问题讨论】:
-
你明白了吗?我有类似的问题
标签: android android-contacts contactscontract android-cursor