无法从联系人中获取 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 ImageData
和 ImageDataAvailable
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();
注意:D
是using 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
我正在使用 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 ImageData
和 ImageDataAvailable
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();
注意:D
是using 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