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

Xamarin.Forms开发中如何获取联系人头像

Xamarin.Forms 获取带头像联系人的替代实现方案

Xamarin.Essentials 官方提供的 Contacts API 本身设计不包含头像字段返回,你可以选择以下几种方案实现带头像的联系人读取:

  • 方案1:使用社区维护的 Xamarin.Contacts 第三方库
    该库已经封装了各平台的联系人读取逻辑,原生支持返回头像数据。使用时先将 Xamarin.Contacts 包通过 NuGet 安装到共享项目和各平台项目中,再按平台要求配置权限:安卓端在 AndroidManifest.xml 中添加 READ_CONTACTS 权限,iOS 端在 Info.plist 中添加 NSContactsUsageDescription 权限描述。
    参考使用代码:
var contactService = CrossContacts.Current;
// 先请求读取权限
if (await contactService.RequestPermission())
{
    // 读取所有联系人
    var allContacts = await contactService.GetContactsAsync();
    foreach (var contact in allContacts)
    {
        // 直接通过Photo属性拿到头像流,可直接转为ImageSource使用
        if (contact.Photo != null)
        {
            var avatarSource = ImageSource.FromStream(() => contact.Photo);
        }
    }
}
  • 方案2:自行实现平台特定服务,通过依赖注入调用
    如果不想引入第三方依赖,可在共享项目定义联系人服务接口,分别在安卓、iOS端实现读取逻辑:
    共享项目定义接口和数据模型:
public interface ICustomContactService
{
    Task<List<CustomContact>> GetContactsWithAvatarAsync();
}

public class CustomContact
{
    public string Name { get; set; }
    public string Phone { get; set; }
    public ImageSource Avatar { get; set; }
}

安卓端通过 ContentResolver 查询 ContactsContract.Data 表获取头像二进制数据转为ImageSource;iOS 端通过 CNContactStore 查询时指定 CNContactImageDataKey 字段获取头像数据,最后通过 DependencyService 注册平台实现,共享项目直接调用即可。

  • 方案3:升级到MAUI后的原生方案
    如果你后续有升级应用到MAUI的计划,MAUI 官方的 Contacts API 已经原生支持头像读取,直接访问 Contact.Image 属性即可拿到头像数据,不需要额外适配。

注意:所有方案都需要先主动申请联系人读取权限,获得用户授权后再执行读取操作,避免权限不足导致应用崩溃。

内容的提问来源于stack exchange,提问作者Nikita Burmistrov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:15:04