通讯录(ios自带无界面)
1,添加框架AddressBook.framework
2,请求权限认证,在Appdelegate.m文件中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/*
kABAuthorizationStatusNotDetermined = 0, 没有决定是否授权
kABAuthorizationStatusRestricted, 受限制
kABAuthorizationStatusDenied, 拒绝
kABAuthorizationStatusAuthorized 授权
*/
//请求用户授权
if(ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusNotDetermined)
{
ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {
if (granted) {
NSLog(@"授权成功");
}
else
{
NSLog(@"授权失败,%@",error);
}
});
}
return YES;
}
3,控制器中实现
#import "ViewController.h"
#import <AddressBook/AddressBook.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// /*
// kABAuthorizationStatusNotDetermined = 0, 没有决定是否授权
// kABAuthorizationStatusRestricted, 受限制
// kABAuthorizationStatusDenied, 拒绝
// kABAuthorizationStatusAuthorized 授权
// */
// //请求用户授权
// if(ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusNotDetermined)
// {
// ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);
// ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {
// if (granted) {
// NSLog(@"授权成功");
// }
// else
// {
// NSLog(@"授权失败,%@",error);
// }
// });
//
// }
}
//获取数据
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//1.创建通讯录
ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);
//获取所有联系人记录
CFArrayRef multivalues=ABAddressBookCopyArrayOfAllPeople(book);
CFIndex count=CFArrayGetCount(multivalues);
for (CFIndex i=0; i<count; ++i) {
ABRecordRef record=CFArrayGetValueAtIndex(multivalues, i);
CFStringRef first=ABRecordCopyValue(record, kABPersonFirstNameProperty);
CFStringRef last=ABRecordCopyValue(record, kABPersonLastNameProperty);
NSLog(@"%@,%@",(__bridge_transfer NSString*)first,(__bridge_transfer NSString*)last);
ABMultiValueRef multiPhones=ABRecordCopyValue(record, kABPersonPhoneProperty);
CFIndex countPhone=ABMultiValueGetCount(multiPhones);
for (int j=0; j<countPhone; j++) {
CFStringRef phone=ABMultiValueCopyValueAtIndex(multiPhones, j);
NSLog(@"phone=%@",(__bridge_transfer NSString*)phone);
}
CFRelease(multiPhones);
}
CFRelease(multivalues);
CFRelease(book);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
通讯录(ios自带无界面)的更多相关文章
- Jenkins构建自动化脚本执行无界面解决方法
场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...
- 批处理启动vm虚拟机服务 vm12启动无界面启动vm虚拟机系统 windows上如何操作服务 sc net启动关闭服务
windows(win10)批处理脚本 打开vm虚拟机的服务,并且开启无界面虚拟机 @echo off net start "vds" net start "VMAuth ...
- XVFB实现selenium在linux上无界面运行安装篇
selenium在linux上无界面运行,其实是非常简单的.具体的方法有使用HtmlUnitDriver或者PhantomJSDriver,有时间我会写写关于这两个东东的文章,其实基本和ChromeD ...
- iOS-通讯录(无界面)
通讯录(无界面) #import "AppDelegate.h" #import <AddressBook/AddressBook.h> @interface AppD ...
- iOS Swift WisdomHUD 提示界面框架
iOS Swift WisdomHUD 提示界面框架 Framework Use profile(应用简介) 一:WisdomHUD简介 今天给大家介绍一款iOS的界面显示器:WisdomHUD,W ...
- iOS 跳转系统设置界面
iOS 跳转系统设置界面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Pri ...
- python之Phantomjs无界面浏览器引擎自动化测试
文字搬运工,本文主要介绍PhantomJS功能,其中有屏幕快照功能,为后面更新[python接口自动化脚本更新版本],其中新版本中新增自动发送邮件功能正文带图片,使用PhantomJS截取图片后发送邮 ...
- ubuntu中如何安装selenium+chrome(headless)无界面浏览器?
selenium是一个Web的自动化测试工具,它可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生.但是它自身不带浏览器,不支持浏览器的功能,因此它 ...
- Chrome handless无界面浏览器的脚本操作
1.什么是Phantomjs (已经停止更新) 是一个无界面的浏览器 支持页面元素查找,js的执行等 由于不进行css和gui渲染,运行效率要比真实的浏览器要快很多 2.如何使用Phantomjs? ...
随机推荐
- C#之系统自带保存属性
源代码下载链接 程序开发很多时候需要根据运行环境做不通的参数配置,通过写ini之类的文本文件是一种方法,但这种方法也同时会把数据暴露 Winform开发中可以将需要配置的字段属性保存到程序中(其实也是 ...
- linux多线程下载工具mwget
linux多线程下载工具mwget 经常使用wget进行文件下载,然而wget的处理速度并不如人意.遇到一些国外的站点,经常慢得像蜗牛一般.然而为了解决这个问题,便有了mwget:m表示multi多线 ...
- SQL Server 2005中的分区表
记录笔记: 转自 猪八戒学做网站 SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表? SQL Server 2005中的分区表(二):如何添加.查询.修改 ...
- ACM/ICPC 之 四道MST-Kruskal解法-练习题(POJ1251-POJ1287-POJ2031-POJ2421)
由于题目简单,部分题意写在代码中(简单题就应该多练英文...),且较少给注释,需要注意的地方会写在代码中,虽然四个题意各有千秋,但万变不离其宗,细细思考一番会发现四道题都属于很直接的最小生成树问题,由 ...
- FFMpeg ver 20160213-git-588e2e3 滤镜中英文对照
1 FFMpeg ver 20160213-git-588e2e3 滤镜中英文对照 2016.02.18 by 1CM 2 T.. = Timeline support 3 支持时间轴 4 .S. = ...
- 禁止Linux用户登录方法
我们在做系统维护的时候,希望个别用户或者所有用户不能登录系统,保证系统在维护期间正常运行.这个时候我们就要禁止用户登录. 1.禁止个别用户登录.比如禁止lynn用户登录. passwd -l lynn ...
- 关于js事件委托
由于事件处理程序可以为现代 Web 应用程序提供交互能力,因此许多开发人员会不分青红皂白地 向页面中添加大量的处理程序. 在创建 GUI 的语言(如 C#)中,为 GUI 中的每个按钮添加一个 onc ...
- Spring@Autowired注解与自动装配
1 配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...
- C++与C#对比学习:类初始化
类和柏拉图的理念世界 我们知道面向对象编程中到处是一个个的类,但类只是个概念性的东西,不是个实体,不占内存,你没实例化之前也不能用它.只有把类实例化成一个对象后,它才是一个真正存在的实体.占有内存,能 ...
- 安装oracleASM
问题:oracleasm status不能启动 解决方案: [root@localhost ~]# oracleasm statusChecking if ASM is loaded: noCheck ...