ios中调用本地通讯录和相册

本文介绍了如何使用AddressBookUI框架中的ABPeoplePickerNavigationController来显示iPhone通讯录,并允许用户选择联系人及其详细信息,包括电话号码等。

一.基本知识

和通讯录中联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问并显示iPhone数据库中的联系人信息。本地相册使用了UIImagePickerViewController

二.具体介绍

1.AddressBookUI显示部分

AddressBookUI中提供了和联系人显示信息相关的一些Controller,有四个:

ABPeoplePickerNavigationController:显示整个通讯录并可以选择一个联系人的信息

ABPersonViewController:显示一个具体联系人的信息

ABNewPersonViewController:增加一个新的联系人

ABUnknownPersonViewController:完善一个联系人的信息


由于其中最主要的是ABPeoplePickerNavigationController,因此就具体的介绍一下通过程序显示整个通讯录并且可以选择其中某个联系人信息的步骤。

 

ABPeoplePickerNavigationController *picker;

在需要的地方调用显示选择联系人界面,同时设置ABPeoplePickerNavigationControllerDelegate委托:

if(!picker){

    picker = [[ABPeoplePickerNavigationController alloc] init];

    // place the delegate of the picker to the controll

    picker.peoplePickerDelegate = self;

}

// showing the picker

[self presentModalViewController:picker animated:YES];


选择联系人界面如下图所示:

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker

  shouldContinueAfterSelectingPerson:(ABRecordRef)person

{

return YES;

}

该方法在用户选择通讯录一级列表的某一项时被调用,通过person可以获得选中联系人的所有信息,但当选中的联系人有多个号码,而我们又希望用户可以明确的指定一个号码时(如拨打电话),返回YES允许通讯录进入联系人详情界面:


当用户点击某个字段时,会调用如下方法:

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker

  shouldContinueAfterSelectingPerson:(ABRecordRef)person

property:(ABPropertyID)property

  identifier:(ABMultiValueIdentifier)identifier

{

if (property == kABPersonPhoneProperty) {

ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, property);

int index = ABMultiValueGetIndexForIdentifier(phoneMulti,identifier);

NSString *phone = (NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, index);

//do something

 [phone release]

[peoplePicker dismissModalViewControllerAnimated:YES];

 

------调用本地相册实例

UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;   

 if (![UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) {        

                  sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  

   }     

  UIImagePickerController *picker = [[UIImagePickerController alloc] init];   

  picker.delegate = self;    picker.allowsEditing = YES;    picker.sourceType = sourceType;   

 [self presentModalViewController:picker animated:YES];   

[picker release];

 

#pragma mark Camera View Delegate Methods

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{    [picker dismissModalViewControllerAnimated:YES];   

     UIImage *image = [[info objectForKey:UIImagePickerControllerEditedImage] retain];   

     [self performSelector:@selector(saveImage:)   withObject:image  afterDelay:0.5];

}

 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

 {    [picker dismissModalViewControllerAnimated:YES];

}

内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估CPO优化流程。; 适合人群:具备一定Python编程基础优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值