Contacts

Browse sample. サンプルを参照する

この記事では、.NET Multi-Platform App UI (.NET MAUI) の IContacts インターフェイスを使用して連絡先を選択し、それに関する情報を読み取る方法について説明します。

IContacts インターフェイスの既定の実装は、Default プロパティを通じて使用できます。 IContacts インターフェイスと Contacts クラスは、どちらも Microsoft.Maui.ApplicationModel.Communication 名前空間に含まれています。

重要

Windows では、連絡先の選択はサポートされていません。

名前空間の競合のため、iOS または macOS をターゲットにする場合は、Contacts 型を Microsoft.Maui.ApplicationModel.Communication.Contacts のように完全修飾する必要があります。 新しいプロジェクトでは、Android および Windows と共に、これらのプラットフォームが自動的にターゲットになります。

iOS および macOS 用にコンパイルされるコードを記述するには、Contacts 型を完全修飾します。 または、using ディレクティブを指定して、Communication 名前空間をマッピングします。

using Communication = Microsoft.Maui.ApplicationModel.Communication;

// Code that uses the namespace:
var contact = await Communication.Contacts.Default.PickContactAsync();

作業の開始

Contacts の機能にアクセスするには、次のプラットフォーム固有のセットアップが必要です。

ReadContacts アクセス許可が必要です。Android プロジェクト内で構成する必要があります。 これは次の方法で追加できます。

  • アセンブリベースのアクセス許可を追加します。

    Platforms/Android/MainApplication.cs ファイルを開き、using ディレクティブの後に次のアセンブリ属性を追加します。

    [assembly: UsesPermission(Android.Manifest.Permission.ReadContacts)]
    

    または

  • Android マニフェストを更新します。

    Platforms/Android/AndroidManifest.xml ファイルを開き、manifest ノードに次を追加します。

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    

    または

  • マニフェスト エディターで Android マニフェストを更新します。

    Visual Studio で、Platforms/Android/AndroidManifest.xml ファイルをダブルクリックして、Android マニフェスト エディターを開きます。 次に、[必要なアクセス許可] で、[READ_CONTACTS] アクセス許可をオンにします。 これにより、AndroidManifest.xml ファイルが自動的に更新されます。

連絡先を選択する

PickContactAsync() メソッドを呼び出せば、ユーザーに連絡先の選択を要求できます。 デバイスに連絡先ダイアログが表示され、ユーザーは連絡先を選択できます。 ユーザーが連絡先を選択しない場合は、null が返されます。

private async void SelectContactButton_Clicked(object sender, EventArgs e)
{
    try
    {
        var contact = await Contacts.Default.PickContactAsync();

        if (contact == null)
            return;
        
        string id = contact.Id;
        string namePrefix = contact.NamePrefix;
        string givenName = contact.GivenName;
        string middleName = contact.MiddleName;
        string familyName = contact.FamilyName;
        string nameSuffix = contact.NameSuffix;
        string displayName = contact.DisplayName;
        List<ContactPhone> phones = contact.Phones; // List of phone numbers
        List<ContactEmail> emails = contact.Emails; // List of email addresses
    }
    catch (Exception ex)
    {
        // Most likely permission denied
    }
}

すべての連絡先を取得する

GetAllAsync メソッドは連絡先のコレクションを返します。

public async IAsyncEnumerable<string> GetContactNames()
{
    var contacts = await Contacts.Default.GetAllAsync();

    // No contacts
    if (contacts == null)
        yield break;

    foreach (var contact in contacts)
        yield return contact.DisplayName;
}

プラットフォームによる違い

このセクションでは、プラットフォーム固有と連絡先 API との違いについて説明します。

  • GetAllAsync メソッドの cancellationToken パラメーターはサポートされていません。