3

次のコードを使用して、ユーザーが連絡先を選択できるようにしています。

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;

ただし、電話番号しか取得できません。連絡先情報に存在するにもかかわらず、オブジェクト「連絡先」にはメールアドレスが含まれていません。1 つのオプションは、切り替えることです。

   ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);

   ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);

しかし、電話番号を取得できません... 1回の選択ですべての情報を取得できるようにしたいです。

1回の選択で両方の情報を選択する方法はありますか? (DesiredFieldsWithContactFieldType に複数のエントリを追加しようとしましたが、例外が発生します...)

よろしくお願いします、

ケラン

EDIT 07.08.2015: 「ContactPicker.DesiredFieldsWithContactFieldType」は「ContactFieldType」の 1 つのタイプのみを受け入れることができるため、これを回避する方法は、最初にユーザーが ContactFieldType.PhoneNumber で連絡先を取得できるようにし、次にプログラムでメールアドレスを取得することでした選択した連絡先。

ユーザーの観点からは、ContactPicker.PickContactsAsync ですべてが正しく表示されるため、これは問題にはなりません。不足している電子メール情報をコード ビハインドで手動で取得する必要があるだけです。これは、連絡先が何であるかを知っているため簡単です。ユーザーによって選択されます。

4

1 に答える 1

1

これを試して:

  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);
             //...
       }
  }

そのため、最初に連絡先の「スケルトン」を取得する必要があります。次に、ContactStore オブジェクトからすべてのプロパティを含む連絡先エンティティ全体を取得できます。

Windows 10 Mobile で動作します。Windows 8 と大きな違いはないはずです。

それが役に立てば幸い。

于 2015-09-15T17:35:37.473 に答える