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

MAUI 访问联系人信息,核心靠 Microsoft.Maui.ApplicationModel.Communication.Contacts 命名空间提供的 API,但要注意:它不是“直接读取全部联系人”的万能接口,而是以**用户主动选择为主、平台能力为限**的设计逻辑。尤其在 Windows 上完全不支持选择联系人,iOS 和 Android 行为也有差异。
不配好,PickContactAsync() 会静默失败或返回 null,连错误提示都不一定有。
AndroidManifest.xml 中添加权限:<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>;从 Android 6.0(API 23)起还需运行时请求授权(MAUI 会自动触发,但需确保用户点“允许”)Info.plist 中添加键 NSContactsUsageDescription,值为向用户说明“为什么需要访问通讯录”(例如:“用于邀请好友加入”),否则系统直接拒绝授权PickContactAsync(),调用后直接返回 null,无回退方案这是最稳定、兼容性最好、也最符合隐私规范的做法。调用 PickContactAsync() 会唤起系统原生联系人选择器,用户点选后返回结构化数据。
Contact 对象包含 DisplayName、GivenName、FamilyName、Phones(List<contactphone></contactphone>)、Emails(List<contactemail></contactemail>)等字段null,务必判空再取属性,否则崩溃GetAllAsync() 理论上可拉取全部联系人,但实际限制多、性能差、且 iOS 上默认被禁用(需额外权限+用户授权+大量字段显式声明)。
CNContactStore 请求 .contacts 权限,并在 keysToFetch 显式列出要读的字段(如 CNContactGivenNameKey),否则返回空IAsyncEnumerable<contact></contact>,适合用 await foreach 遍历,别直接转 List 或 ToArray
很多人写完发现 contact 总是 null,大概率卡在这几个地方:
NSContactsUsageDescription 缺失或为空)GetAllAsync() 在所有平台都可用,其实 Windows 完全不支持,iOS 默认只返回空集合contact.Phones 或 contact.Emails 是否为空就直接取 [0],引发 IndexOutOfRangeException
基本上就这些。用好 PickContactAsync() + 做好平台适配,就能覆盖绝大多数联系人交互场景,不复杂但容易忽略细节。
以上就是MAUI怎么访问联系人信息 MAUI Contacts API用法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号