分享方式:


連絡人

Browse sample. 流覽範例

本文說明如何使用 .NET 多平臺應用程式 UI (.NET MAUI) IContacts 介面來選取聯繫人,並閱讀其相關信息。

介面的預設實作 IContacts 可透過 Default 屬性取得。 IContacts介面和Contacts類別都包含在 命名空間中Microsoft.Maui.ApplicationModel.Communication

重要

Windows 不支持選擇聯繫人。

由於命名空間衝突,當 Contacts 以 iOS 或 macOS 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();

開始使用

若要存取 聯繫人 功能,需要下列平臺特定設定。

需要 ReadContacts 權限,而且必須在 Android 專案中設定。 能以下列方式新增:

  • 新增元件型權限:

    開啟 Platform/Android/MainApplication.cs 檔案,並在 指示詞之後using新增下列元件屬性:

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

    - 或 -

  • 更新 Android 指令清單:

    開啟 [平臺/Android/AndroidManifest.xml] 檔案,並在manifest節點中新增下列內容:

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

    - 或 -

  • 更新指令清單編輯器中的 Android 指令清單:

    在 Visual Studio 中按兩下 [平臺/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 的平臺特定差異。

  • cancellationToken不支援 方法中的 GetAllAsync 參數。