MAUI怎么访问联系人信息 MAUI Contacts API用法

admin 百科 11
MAUI访问联系人需以用户主动选择为主,Windows不支持,iOS/Android需配置权限与描述字段;推荐用PickContactAsync()安全获取单个联系人,避免GetAllAsync()全量读取。

MAUI怎么访问联系人信息 MAUI Contacts API用法-第1张图片-佛山资讯网

MAUI 访问联系人信息,核心靠 Microsoft.Maui.ApplicationModel.Communication.Contacts 命名空间提供的 API,但要注意:它不是“直接读取全部联系人”的万能接口,而是以**用户主动选择为主、平台能力为限**的设计逻辑。尤其在 Windows 上完全不支持选择联系人,iOS 和 Android 行为也有差异。

必须先配置平台权限和设置

不配好,PickContactAsync() 会静默失败或返回 null,连错误提示都不一定有。

  • Android:在 AndroidManifest.xml 中添加权限:<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>;从 Android 6.0(API 23)起还需运行时请求授权(MAUI 会自动触发,但需确保用户点“允许”)
  • iOS / Mac Catalyst:在 Info.plist 中添加键 NSContactsUsageDescription,值为向用户说明“为什么需要访问通讯录”(例如:“用于邀请好友加入”),否则系统直接拒绝授权
  • Windows:官方明确不支持 PickContactAsync(),调用后直接返回 null,无回退方案

推荐方式:让用户手动选一个联系人

这是最稳定、兼容性最好、也最符合隐私规范的做法。调用 PickContactAsync() 会唤起系统原生联系人选择器,用户点选后返回结构化数据。

  • 代码里直接 await 调用,无需自己处理 UI 或权限弹窗(MAUI 封装了)
  • 返回的 Contact 对象包含 DisplayNameGivenNameFamilyNamePhonesList<contactphone></contactphone>)、EmailsList<contactemail></contactemail>)等字段
  • 如果用户取消或没选,结果是 null,务必判空再取属性,否则崩溃
  • 示例关键片段:
      var contact = await Contacts.Default.PickContactAsync();
      if (contact == null) return;
      string name = contact.DisplayName;
      string phone = contact.Phones.FirstOrDefault()?.Number ?? "";

谨慎使用:获取全部联系人列表

GetAllAsync() 理论上可拉取全部联系人,但实际限制多、性能差、且 iOS 上默认被禁用(需额外权限+用户授权+大量字段显式声明)。

标签: android windows app mac ai ios win microsoft 常见问题 为什么

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~