如何使用Xamarin.Forms.Contacts 1.0.3插件实现联系人列表视图?
解决Xamarin.Forms访问手机联系人的问题
我来帮你梳理下Xamarin.Forms.Contacts 1.0.3的使用方法,以及一些更可靠的替代方案,适配你用的Mac版Visual Studio 2017:
一、Xamarin.Forms.Contacts 1.0.3 实操步骤
这个插件的使用核心是权限配置+代码调用,分三步走:
安装插件
在Mac版VS2017中,右键解决方案里的所有项目(包括共享/PCL项目和iOS、Android平台项目),选择「管理NuGet程序包」,搜索Xamarin.Forms.Contacts并安装1.0.3版本。配置平台权限
- iOS端:打开Info.plist,添加联系人访问权限描述(iOS强制要求说明用途),代码如下:
<key>NSContactsUsageDescription</key> <string>需要访问联系人以展示联系人列表</string> - Android端:打开AndroidManifest.xml,添加读取联系人的权限:
如果需要修改联系人,再额外添加<uses-permission android:name="android.permission.READ_CONTACTS" />WRITE_CONTACTS权限。
- iOS端:打开Info.plist,添加联系人访问权限描述(iOS强制要求说明用途),代码如下:
代码中调用获取联系人
在你的Xamarin.Forms页面里,通过以下代码初始化插件、请求权限并绑定到ListView:using Xamarin.Forms.Contacts; // 初始化联系人管理器 var contactManager = new ContactManager(); // 请求权限(iOS自动弹系统授权框,Android处理动态权限请求) var hasPermission = await contactManager.RequestPermissionAsync(); if (hasPermission) { // 获取所有联系人 var contacts = await contactManager.GetContactsAsync(); // 整理联系人数据后绑定到ListView yourContactListView.ItemsSource = contacts.Select(contact => new { FullName = $"{contact.GivenName} {contact.FamilyName}", PrimaryPhone = contact.Phones.FirstOrDefault()?.Number }).ToList(); } else { // 处理权限被拒绝的情况 await DisplayAlert("提示", "需要允许访问联系人权限才能展示列表", "确定"); }
二、更可靠的替代方案:Xamarin.Essentials(官方推荐)
因为部分第三方插件可能存在维护不及时的问题,官方的Xamarin.Essentials是更稳妥的选择,它的Contacts API支持多平台且持续更新:
安装Xamarin.Essentials
同样通过NuGet安装Xamarin.Essentials到所有项目。配置权限
和上面的平台权限配置一致,iOS加Info.plist描述,Android加Manifest权限。代码调用示例
using Xamarin.Essentials; try { // 请求读取联系人权限(Android需要动态请求) var status = await Permissions.RequestAsync<Permissions.ContactsRead>(); if (status != PermissionStatus.Granted) { await DisplayAlert("提示", "权限被拒绝,无法访问联系人", "确定"); return; } // 获取所有联系人 var allContacts = await Contacts.GetAllAsync(); yourContactListView.ItemsSource = allContacts; } catch (FeatureNotSupportedException) { await DisplayAlert("提示", "当前设备不支持联系人访问功能", "确定"); } catch (Exception ex) { await DisplayAlert("错误", $"获取联系人失败:{ex.Message}", "确定"); }
三、Mac版VS2017的注意事项
- 确保你的iOS项目目标版本至少为iOS 10.0,Android项目目标版本至少为API 23(Android 6.0开始要求动态权限);
- 安装NuGet包时,一定要确保共享项目和所有平台项目都安装了对应的库,避免出现找不到类的错误。
内容的提问来源于stack exchange,提问作者Neurik
相关产品推荐
相关产品推荐

