You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:46:00