2016-01-22 156 views

回答

2

您将需要为此与ContactStore.FindContactsAsync联系,然后使用linq解析它们。正如在MSDN上所说的,您可以通过传递一个数字来搜索联系人,但正如我所尝试的那样,您必须输入整个数字。所以,如果你想搜索例如包含“199”的所有联系人,你应该能够做到这一点是这样的:

var contactStore = await ContactManager.RequestStoreAsync(); 
var contacts = await contactStore.FindContactsAsync(); 
var contactsByNumber = contacts.Where(x => x.Phones.Any(y => y.Number.Contains("199"))); 
//var contactsByNumber = await contactStore.FindContactsAsync("112"); // you may search like this but you must enter full number 
foreach (var item in contactsByNumber) Debug.WriteLine($"Name: {item.DisplayName} Phone: {item.Phones.FirstOrDefault().Number}"); 

记住添加联系人能力清单中。

2

使用此:)

private async Task<Contact> SearchContactByPhoneNumberAsync(string phoneNumber) 
{ 
    Contact resultContact = null; 
    var contactStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadOnly); 
    var contactReader = contactStore.GetContactReader(new ContactQueryOptions(phoneNumber)); 
    while (true) 
    { 
     var contactBatch = await contactReader.ReadBatchAsync(); 
     if (contactBatch.Contacts.Count > 0) 
     { 
      foreach (var contact in contactBatch.Contacts) 
      { 
       if (contact.Phones?.Count > 0) 
       { 
        foreach (var phone in contact.Phones) 
        { 
         if (phone.Number == phoneNumber) 
         { 
          resultContact = contact; 
          break; 
         } 
        } 
       } 
      } 
     } 
     else 
     { 
      break; 
     } 
    } 

    return resultContact; 
} 

我已经创建了数0635806354测试接触和使用代码波纹管搜索:

var result = await SearchContactByPhoneNumberAsync("+38 (063) 580-63-54"); 
    if (result != null) 
    { 
     Debug.WriteLine(result.Name); 
    } 
相关问题