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 差异。