在iOS中读取通讯录中联系人电话号码时需要注意的版本区别

原创 2014年12月03日 15:36:32

今天遇到一个问题,发现同一个联系人的电话号码有时候读取得到,有时候读取不到。后来发现在iOS 8上是正常工作的,但是在iOS 7.1上获取到的值为空(也可能是iOS 8之前的所有版本,没有全部验证过)。

1
2
3
4
5
6
7
8
9
10
11
12
ABAddressBookRef abRef = ABAddressBookCreateWithOptions(NULL, NULL);
CFArrayRef cfPersons = ABAddressBookCopyArrayOfAllPeople(abRef);
NSArray *persons = CFBridgingRelease(cfPersons);
CFRelease(abRef);
 
ABRecordRef person = (__bridge ABRecordRef)(persons[0]);
ABMultiValueRef phoneNumbers = (ABMultiValueRef)ABRecordCopyValue(person, kABPersonPhoneProperty);
if (phoneNumbers) {
  CFIndex count = ABMultiValueGetCount(phoneNumbers);
  NSString *number = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
  CFRelease(phoneNumbers);
}

如上代码,如果先释放abRef再读取person的属性值,在iOS 7.1上,单字段的属性如FirstName、LastName等是可以获取得到的,但多字段的属性如PhoneNumber、Address、Email是获取不到的。在iOS 8上都是可以获取得到的。

如果是在读取完多字段属性后再释放abRef,那么在iOS 7.1上也可以正常工作。

iOS 点击号码拨打电话三种方式

1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 NSMutableString * str=[[NSMutableString alloc] initWi...
  • wujakf
  • wujakf
  • 2017年05月25日 10:12
  • 824

根据电话号码查找通讯录中联系人姓名

方法一 参照google文档的说明进行的查找操作: google文档query说明如下(第二条): Query If you need to read an individual ...
  • Qiqihar
  • Qiqihar
  • 2013年05月27日 15:09
  • 800

android根据电话号码查询联系人名称,导出通讯录所有联系人的方法

点击打开链接 /* * 根据电话号码取得联系人姓名 */ public static String getContactNameByPhoneNumber(Co...

ContentProvider获取系统的电话号码绑定到ListView以及跳转通讯录获区联系人信息绑定到前台。

说白了就是通过内容提供者(ContentProvider)访问数据库的联系人数据库表,通过多表联查实现提取联系人的姓名以及电话号码,同时将数据库的联系人绑定到List集合中,展示在List中,大概就是...

iOS开发获取手机通讯录中的电话号码和姓名

1、申请授权[objc] view plain copy print?#import “AppDelegate.h”  #import     @interface AppDelegate ()   ...

Android 2.0 API 读取通讯录中电话号码的实例

import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor;...

实现简单通讯录操作。
1、定义联系人类AddressPerson。实例变量:姓名、性别、电话号码、住址、分组名称。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息
2、在main.m中定义可变

(在 .h文件中声明) #import @interface AddressPerson : NSObject { NSString *_name;//姓名 NSString *_...

//实现中等难度通讯录。需求: //1、定义联系人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息

import import “Contact.h”import “AddressBook.h”int main(int argc, const char * argv[]) { @autor...

实现中等难度通讯录。需求: 1、定义联系人类AddressContact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人

// 1、定义联系人类AddressContact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息 { N...

android之选择联系人并返回电话号码

转自:http://blog.csdn.net/jason0539 在跟着这个教程联系的时候,它所用到的选择联系人方式是自己从数据库里把联系人读取出来,然后用listview显示,选择后返回手机...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在iOS中读取通讯录中联系人电话号码时需要注意的版本区别
举报原因:
原因补充:

(最多只允许输入30个字)