无法从联系人中获取 ABPerson 的图像

Can not get image from ABPerson from contacts

我正在使用 Xamarin 尝试从 AddressBook 获取来自 ABPerson 的图像。我成功地获得了关于人名、电话等的所有信息。但是方法 ABPerson.HasImage returns false for all contacts even for those who have a photo in the address book and method ABPerson.GetImage 也总是 returns 为空。我试图不仅在模拟器上测试它,还在设备上测试它。有人知道我该如何解决吗?

我用来检索联系人的代码:

using (var addressBook = new ABAddressBook()){
    addressBook.requestAccess((bool haveAccess, NSError e) => {
        if(haveAccess){
            contacts = addressBook.GetPeople().ToList();
        }
    });
}

在 iOS9 中,这些方法已被弃用

相反,您应该使用 CNContact ImageDataImageDataAvailable

Contacts 框架概述

这个例子只是从模拟器中抓取默认的联系人,其中有我应用于其中一些的图像。

尝试使用此代码替换您的代码,并检查应用程序输出以查看 ABPerson 的图像是否正确显示。

示例代码:

var addressBook = new ABAddressBook();
var contacts = addressBook.GetPeople();
foreach (var contact in contacts)
{
    D.WriteLine("{0} {1}", contact.FirstName, contact.LastName);
    D.WriteLine("Has image?: {0}", contact.HasImage);
    if (contact.HasImage)
    {
        var thumb = contact.GetImage(ABPersonImageFormat.Thumbnail);
        var full = contact.GetImage(ABPersonImageFormat.OriginalSize);
        var thumbsize = thumb.GetBase64EncodedString(NSDataBase64EncodingOptions.None);
        var fullsize = full.GetBase64EncodedString(NSDataBase64EncodingOptions.None);
        D.WriteLine("Thumb length: {0}", thumbsize.Length);
        D.WriteLine("Full length: {0}", fullsize.Length);
    }
}
addressBook.Dispose();

注意:Dusing D = System.Diagnostics.Debug;

输出:

Kate Bell
Has image?: False
Daniel Higgins
Has image?: True
Thumb length: 35988
Full length: 196492
John Appleseed
Has image?: True
Thumb length: 59180
Full length: 1691176
Anna Haro
Has image?: False
Hank Zakroff
Has image?: True
Thumb length: 50364
Full length: 3473024
David Taylor
Has image?: False