Bagikan melalui


Pilih kontak

Melalui namespace Layanan Windows.ApplicationModel.Contacts , Anda memiliki beberapa opsi untuk memilih kontak. Di sini, kami akan menunjukkan kepada Anda cara memilih satu kontak atau beberapa kontak, dan kami akan menunjukkan kepada Anda cara mengonfigurasi pemilih kontak untuk hanya mengambil informasi kontak yang dibutuhkan aplikasi Anda.

Menyiapkan pemilih kontak

Buat instans Windows.ApplicationModel.Contacts.ContactPicker dan tetapkan ke variabel.

var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();

Mengatur mode pemilihan (opsional)

Secara default, pemilih kontak mengambil semua data yang tersedia untuk kontak yang dipilih pengguna. Properti SelectionMode memungkinkan Anda mengonfigurasi pemilih kontak untuk mengambil hanya bidang data yang dibutuhkan oleh aplikasi Anda. Ini adalah cara yang lebih efisien untuk menggunakan pemilih kontak jika Anda hanya memerlukan subset data kontak yang tersedia.

Pertama, atur properti SelectionMode ke bidang :

contactPicker.SelectionMode = Windows.ApplicationModel.Contacts.ContactSelectionMode.Fields;

Kemudian, gunakan properti DesiredFieldsWithContactFieldType untuk menentukan bidang yang Anda inginkan untuk diambil oleh pemilih bidang kontak. Contoh ini mengonfigurasi pemilih kontak untuk mengambil alamat email:

contactPicker.DesiredFieldsWithContactFieldType.Add(Windows.ApplicationModel.Contacts.ContactFieldType.Email);

Luncurkan pemilih

Contact contact = await contactPicker.PickContactAsync();

Gunakan PickContactsAsync jika Anda ingin pengguna memilih satu atau beberapa kontak.

public IList<Contact> contacts;
contacts = await contactPicker.PickContactsAsync();

Memproses kontak

Saat pemilih kembali, periksa apakah pengguna telah memilih kontak apa pun. Jika demikian, proses informasi kontak.

Contoh ini menunjukkan cara memproses satu kontak. Di sini kita mengambil nama kontak dan menyalinnya ke kontrol TextBlock yang disebut OutputName.

if (contact != null)
{
    OutputName.Text = contact.DisplayName;
}
else
{
    rootPage.NotifyUser("No contact was selected.", NotifyType.ErrorMessage);
}

Contoh ini menunjukkan cara memproses beberapa kontak.

if (contacts != null && contacts.Count > 0)
{
    foreach (Contact contact in contacts)
    {
        // Do something with the contact information.
    }
}

Contoh lengkap (kontak tunggal)

Contoh ini menggunakan pemilih kontak untuk mengambil satu nama kontak bersama dengan alamat email, lokasi, atau nomor telepon.

// ...
using Windows.ApplicationModel.Contacts;
// ...

private async void PickAContactButton-Click(object sender, RoutedEventArgs e)
{
    ContactPicker contactPicker = new ContactPicker();

    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);
    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Address);
    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);

    Contact contact = await contactPicker.PickContactAsync();

    if (contact != null)
    {
        OutputFields.Visibility = Visibility.Visible;
        OutputEmpty.Visibility = Visibility.Collapsed;

        OutputName.Text = contact.DisplayName;

        AppendContactFieldValues(OutputEmails, contact.Emails);
        AppendContactFieldValues(OutputPhoneNumbers, contact.Phones);
        AppendContactFieldValues(OutputAddresses, contact.Addresses);
    }
    else
    {
        OutputEmpty.Visibility = Visibility.Visible;
        OutputFields.Visibility = Visibility.Collapsed;
    }
}

private void AppendContactFieldValues<T>(TextBlock content, IList<T> fields)
{
    if (fields.Count > 0)
    {
        StringBuilder output = new StringBuilder();

        if (fields[0].GetType() == typeof(ContactEmail))
        {
            foreach (ContactEmail email in fields as IList<ContactEmail>)
            {
                output.AppendFormat("Email: {0} ({1})\n", email.Address, email.Kind);
            }
        }
        else if (fields[0].GetType() == typeof(ContactPhone))
        {
            foreach (ContactPhone phone in fields as IList<ContactPhone>)
            {
                output.AppendFormat("Phone: {0} ({1})\n", phone.Number, phone.Kind);
            }
        }
        else if (fields[0].GetType() == typeof(ContactAddress))
        {
            List<String> addressParts = null;
            string unstructuredAddress = "";

            foreach (ContactAddress address in fields as IList<ContactAddress>)
            {
                addressParts = (new List<string> { address.StreetAddress, address.Locality, address.Region, address.PostalCode });
                unstructuredAddress = string.Join(", ", addressParts.FindAll(s => !string.IsNullOrEmpty(s)));
                output.AppendFormat("Address: {0} ({1})\n", unstructuredAddress, address.Kind);
            }
        }

        content.Visibility = Visibility.Visible;
        content.Text = output.ToString();
    }
    else
    {
        content.Visibility = Visibility.Collapsed;
    }
}

Contoh lengkap (beberapa kontak)

Contoh ini menggunakan pemilih kontak untuk mengambil beberapa kontak lalu menambahkan kontak ke kontrol ListView yang disebut OutputContacts.

MainPage rootPage = MainPage.Current;
public IList<Contact> contacts;

private async void PickContactsButton-Click(object sender, RoutedEventArgs e)
{
    var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
    contactPicker.CommitButtonText = "Select";
    contacts = await contactPicker.PickContactsAsync();

    // Clear the ListView.
    OutputContacts.Items.Clear();

    if (contacts != null && contacts.Count > 0)
    {
        OutputContacts.Visibility = Windows.UI.Xaml.Visibility.Visible;
        OutputEmpty.Visibility = Visibility.Collapsed;

        foreach (Contact contact in contacts)
        {
            // Add the contacts to the ListView.
            OutputContacts.Items.Add(new ContactItemAdapter(contact));
        }
    }
    else
    {
        OutputEmpty.Visibility = Visibility.Visible;
    }         
}
public class ContactItemAdapter
{
    public string Name { get; private set; }
    public string SecondaryText { get; private set; }

    public ContactItemAdapter(Contact contact)
    {
        Name = contact.DisplayName;
        if (contact.Emails.Count > 0)
        {
            SecondaryText = contact.Emails[0].Address;
        }
        else if (contact.Phones.Count > 0)
        {
            SecondaryText = contact.Phones[0].Number;
        }
        else if (contact.Addresses.Count > 0)
        {
            List<string> addressParts = (new List<string> { contact.Addresses[0].StreetAddress,
              contact.Addresses[0].Locality, contact.Addresses[0].Region, contact.Addresses[0].PostalCode });
              string unstructuredAddress = string.Join(", ", addressParts.FindAll(s => !string.IsNullOrEmpty(s)));
            SecondaryText = unstructuredAddress;
        }
    }
}

Ringkasan dan langkah berikutnya

Sekarang Anda memiliki pemahaman dasar tentang cara menggunakan pemilih kontak untuk mengambil informasi kontak. Unduh sampel aplikasi Universal Windows dari GitHub untuk melihat contoh selengkapnya tentang cara menggunakan kontak dan pemilih kontak.