Windows phone 8.1 使用联系人选择器检索电子邮件和 phone 号码
Windows phone 8.1 using Contact Picker to retrieve both email and phone number
我正在使用以下代码允许用户 select 联系人:
ContactPicker ContactPicker = new ContactPicker();
ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
var Contacts = await ContactPicker.PickContactsAsync();
if (Contacts.Count > 0)
{
foreach (Contact contact in Contacts)
{
string telephone = string.Empty;
string email = string.Empty;
if (contact.Phones.Count > 0)
{
telephone = contact.Phones[0].Number;
}
if (contact.Emails.Count > 0)
{
email = contact.Emails[0].Address;
}
PartyPerson person = new PartyPerson(DateTime.Now.ToString("PP_yyMMdd_hhmmss_ffff"), true, contact.DisplayName, 0, 0, 0, email, telephone);
AddPartyPerson(person);
}
}
ContactPicker = null;
但是,我只得到 phone 号码,对象 "contact" 不包含任何电子邮件地址,即使它们存在于联系信息中。
一种选择是切换:
ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
和
ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);
但是我没有得到 phone 号码...我希望能够在一个 select.
中检索所有信息
有没有办法通过一个 select 来 select 两种信息?
(我也尝试向 DesiredFieldsWithContactFieldType 添加多个条目,但随后出现异常...)
此致,
可然
编辑 07.08.2015:
由于 "ContactPicker.DesiredFieldsWithContactFieldType" 只能接受一种类型的 "ContactFieldType",我解决这个问题的方法是首先允许用户通过 ContactFieldType.PhoneNumber 获取联系人,然后我以编程方式检索电子邮件地址selected 联系人。
从用户的角度来看,这不会成为问题,因为所有内容都将在 ContactPicker.PickContactsAsync 中正确显示,我们只需要在代码隐藏中手动检索丢失的电子邮件信息,即很容易,因为我们知道用户 select 编辑了哪些联系人。
试试这个:
ContactStore contactStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadOnly);
ContactPicker contactPicker = new ContactPicker();
IList<Contact> pickedContacts = await contactPicker.PickContactsAsync();
int pickedCount = pickedContacts != null ? pickedContacts.Count : 0;
if (pickedCount > 0)
{
for (int i = 0; i < count; ++i)
{
Contact c = pickedContacts[i];
Contact realContact = await contactStore.GetContactByIdAsync(c.Id);
//...
}
}
因此,您首先需要获取联系人的 "skeleton",然后您可以从 ContactStore 对象中获取整个联系人实体及其所有属性。
它适用于 Windows 10 Mobile。和Windows8.
应该没有太大区别
希望对您有所帮助。
我正在使用以下代码允许用户 select 联系人:
ContactPicker ContactPicker = new ContactPicker();
ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
var Contacts = await ContactPicker.PickContactsAsync();
if (Contacts.Count > 0)
{
foreach (Contact contact in Contacts)
{
string telephone = string.Empty;
string email = string.Empty;
if (contact.Phones.Count > 0)
{
telephone = contact.Phones[0].Number;
}
if (contact.Emails.Count > 0)
{
email = contact.Emails[0].Address;
}
PartyPerson person = new PartyPerson(DateTime.Now.ToString("PP_yyMMdd_hhmmss_ffff"), true, contact.DisplayName, 0, 0, 0, email, telephone);
AddPartyPerson(person);
}
}
ContactPicker = null;
但是,我只得到 phone 号码,对象 "contact" 不包含任何电子邮件地址,即使它们存在于联系信息中。 一种选择是切换:
ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
和
ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);
但是我没有得到 phone 号码...我希望能够在一个 select.
中检索所有信息有没有办法通过一个 select 来 select 两种信息? (我也尝试向 DesiredFieldsWithContactFieldType 添加多个条目,但随后出现异常...)
此致,
可然
编辑 07.08.2015: 由于 "ContactPicker.DesiredFieldsWithContactFieldType" 只能接受一种类型的 "ContactFieldType",我解决这个问题的方法是首先允许用户通过 ContactFieldType.PhoneNumber 获取联系人,然后我以编程方式检索电子邮件地址selected 联系人。
从用户的角度来看,这不会成为问题,因为所有内容都将在 ContactPicker.PickContactsAsync 中正确显示,我们只需要在代码隐藏中手动检索丢失的电子邮件信息,即很容易,因为我们知道用户 select 编辑了哪些联系人。
试试这个:
ContactStore contactStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadOnly);
ContactPicker contactPicker = new ContactPicker();
IList<Contact> pickedContacts = await contactPicker.PickContactsAsync();
int pickedCount = pickedContacts != null ? pickedContacts.Count : 0;
if (pickedCount > 0)
{
for (int i = 0; i < count; ++i)
{
Contact c = pickedContacts[i];
Contact realContact = await contactStore.GetContactByIdAsync(c.Id);
//...
}
}
因此,您首先需要获取联系人的 "skeleton",然后您可以从 ContactStore 对象中获取整个联系人实体及其所有属性。
它适用于 Windows 10 Mobile。和Windows8.
应该没有太大区别希望对您有所帮助。