Maui 获取所有联系人

[删除(380066935@qq.com或微信通知)]

更好的阅读体验请查看原文:https://learn.microsoft.com/zh-cn/dotnet/maui/platform-integration/communication/contacts?view=net-maui-7.0&tabs=android

本文介绍如何使用 .NET 多平台应用 UI (.NET MAUI) IContacts 界面来选择联系人并阅读相关信息。

接口的默认实现 IContacts 可通过 Contacts.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 项目中进行配置。 可以通过以下方法添加此权限:

  • 添加基于程序集的权限:

    打开 Properties 文件夹下的 AssemblyInfo.cs 文件并添加 :

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

    - 或 -

  • 更新 Android 清单:

    打开 Properties 文件夹下的AndroidManifest.xml 文件,并在 节点中添加manifest以下内容:

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

选取联系人

可以通过调用 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 参数。