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

如何使用Xamarin.Forms.Contacts 1.0.3插件实现联系人列表视图?

解决Xamarin.Forms访问手机联系人的问题

我来帮你梳理下Xamarin.Forms.Contacts 1.0.3的使用方法,以及一些更可靠的替代方案,适配你用的Mac版Visual Studio 2017:

一、Xamarin.Forms.Contacts 1.0.3 实操步骤

这个插件的使用核心是权限配置+代码调用,分三步走:

  1. 安装插件
    在Mac版VS2017中,右键解决方案里的所有项目(包括共享/PCL项目和iOS、Android平台项目),选择「管理NuGet程序包」,搜索Xamarin.Forms.Contacts并安装1.0.3版本。

  2. 配置平台权限

    • iOS端:打开Info.plist,添加联系人访问权限描述(iOS强制要求说明用途),代码如下:
      <key>NSContactsUsageDescription</key>
      <string>需要访问联系人以展示联系人列表</string>
      
    • Android端:打开AndroidManifest.xml,添加读取联系人的权限:
      <uses-permission android:name="android.permission.READ_CONTACTS" />
      
      如果需要修改联系人,再额外添加WRITE_CONTACTS权限。
  3. 代码中调用获取联系人
    在你的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支持多平台且持续更新:

  1. 安装Xamarin.Essentials
    同样通过NuGet安装Xamarin.Essentials到所有项目。

  2. 配置权限
    和上面的平台权限配置一致,iOS加Info.plist描述,Android加Manifest权限。

  3. 代码调用示例

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:40:22