【问题标题】:Can not get image from ABPerson from contacts无法从联系人中获取 ABPerson 的图像
【发布时间】:2016-05-02 17:19:22
【问题描述】:

使用 Xamarin 我正在尝试从地址簿中的 ABPerson 获取图像。我已成功获取有关人名、电话等的所有信息。但方法 ABPerson.HasImage 对所有联系人返回 false,即使对于那些在通讯录中有照片的联系人,方法 ABPerson.GetImage 也总是返回 null。我尝试不仅在模拟器上测试它,还在设备上测试它。有人知道我该如何解决吗?

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

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

【问题讨论】:

  • 你能显示你用来检索ABPerson的代码吗?因为我可以使用ABPeoplePickerNavigationController 在 iOS 8 和 9 上检索缩略图和全尺寸图像并返回 ABPerson 并检查HasImage 并通过GetImage 拉动NSData
  • 我在帖子中添加了代码。我是按照this教程做的。

标签: ios xamarin mono xamarin.ios abaddressbook


【解决方案1】:

此示例只是从模拟器中获取默认联系人,其中包含我应用到其中一些的图像。

尝试使用此代码替换您的代码并检查应用程序输出以查看具有图像的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

【讨论】:

  • 非常感谢!我在新应用程序中尝试了您的代码并且它有效。然后我开始弄清楚我的应用程序中发生了什么,结果发现我丢失了某种数据,因为我使用了 GetContacts 方法,然后使用了返回列表。
【解决方案2】:

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

您应该使用 CNContact ImageDataImageDataAvailable

Contacts 框架概述

【讨论】:

  • 感谢您的建议,我稍后会尝试重构我的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
相关资源
最近更新 更多