如何在.NET MAUI中获取联系人电话号码标签?
在.NET MAUI中获取联系人电话号码及对应标签
当然可以实现,.NET MAUI的Microsoft.Maui.ApplicationModel.Contacts API已经提供了获取电话号码标签的能力,核心是利用ContactPhone对象的Type枚举和Label属性来获取对应标签信息。
步骤1:配置权限
不同平台需要提前配置联系人访问权限:
- Android:在
Platforms/Android/AndroidManifest.xml中添加权限声明<uses-permission android:name="android.permission.READ_CONTACTS" /> - iOS:在
Platforms/iOS/Info.plist中添加权限描述<key>NSContactsUsageDescription</key> <string>需要访问联系人信息以获取电话号码及对应标签</string> - Windows:在
Package.appxmanifest中启用Contacts权限(可通过可视化编辑器或手动添加权限节点)
步骤2:编写获取联系人及标签的代码
引用命名空间后,即可通过Contacts API获取带标签的电话号码:
using Microsoft.Maui.ApplicationModel.Contacts; async Task FetchContactsWithPhoneLabels() { // 检查并请求联系人读取权限 var permissionStatus = await Permissions.CheckStatusAsync<Permissions.ContactsRead>(); if (permissionStatus != PermissionStatus.Granted) { permissionStatus = await Permissions.RequestAsync<Permissions.ContactsRead>(); if (permissionStatus != PermissionStatus.Granted) { // 权限未授予,可提示用户或终止操作 return; } } // 获取包含电话号码的联系人列表 var contacts = await Contacts.Default.GetAllAsync(ContactsFields.PhoneNumbers); foreach (var contact in contacts) { if (!contact.Phones.Any()) continue; Console.WriteLine($"联系人:{contact.DisplayName}"); foreach (var phoneEntry in contact.Phones) { // 解析电话号码标签 string phoneLabel = phoneEntry.Type switch { PhoneType.Home => "Home", PhoneType.Work => "Work", PhoneType.Mobile => "Mobile", PhoneType.Fax => "Fax", PhoneType.Other => string.IsNullOrWhiteSpace(phoneEntry.Label) ? "Other" : phoneEntry.Label, _ => "Unknown" }; Console.WriteLine($" 号码:{phoneEntry.Number},标签:{phoneLabel}"); } } }
关键说明
PhoneType枚举涵盖了大部分系统预设标签(如Home、Work、Mobile等)- 若用户自定义了电话号码标签(比如"家庭备用"),
PhoneType会返回Other,此时可通过phoneEntry.Label获取自定义标签文本 - 调用
GetAllAsync时指定ContactsFields.PhoneNumbers可以只加载需要的字段,提升性能
内容的提问来源于stack exchange,提问作者Steve Peschka
相关产品推荐
相关产品推荐

