zoukankan      html  css  js  c++  java
  • 地址薄、短信、电话、邮件

    1、地址薄

    地址薄是一个数据库,里面存储了联系人的相关信息。实现访问地址薄有两种框架:AddressBook.framework没有界面,通过代码获取联系人信息、AddressBookUI.framework通过系统地址薄交互界面来访问。

    1)代码访问地址薄

     1 //代码获取地址薄
     2     @IBAction func codeToAddressButtonClick()
     3     {
     4         //首先定义一个Unmanaged<CFError>错误标记对象,可以通过该对象来判断是否成功
     5         var error:Unmanaged<CFError>?
     6         
     7         //通过ABAddressBookCreateWithOptions方法创建一个address Book对象,来获取电话簿句柄
     8         let addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
     9         
    10         //发出授权信息
    11         let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()
    12         
    13         //
    14         if sysAddressBookStatus == .Denied || sysAddressBookStatus == .NotDetermined {
    15             // Need to ask for authorization
    16             let authorizedSingal:dispatch_semaphore_t = dispatch_semaphore_create(0)
    17             let askAuthorization:ABAddressBookRequestAccessCompletionHandler = { success, error in
    18                 if success {
    19                     ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray
    20                     dispatch_semaphore_signal(authorizedSingal)
    21                 }
    22             }
    23             ABAddressBookRequestAccessWithCompletion(addressBook, askAuthorization)
    24             dispatch_semaphore_wait(authorizedSingal, DISPATCH_TIME_FOREVER)
    25         }
    26         
    27         
    28         let listContacts:NSArray  = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray
    29         
    30         //调用analyzeSysContacts方法
    31         analyzeSysContacts(listContacts)
    32     }
    //代码获取地址薄
        func analyzeSysContacts(sysContacts:NSArray) {
            
            for contact in sysContacts {
                
                /*
                部分单值属性
                */
                //
                let firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as! String? ?? ""
                print("姓:(firstName)")
                
                
                //
                let lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as! String? ?? ""
                print("名:(lastName)")
                
                
                // 昵称
                let nikename = ABRecordCopyValue(contact, kABPersonNicknameProperty)?.takeRetainedValue() as! String? ?? ""
                
                print("昵称:(nikename)")
                
                
                // 公司(组织)
                let  organization = ABRecordCopyValue(contact, kABPersonOrganizationProperty)?.takeRetainedValue() as! String? ?? ""
                print("公司(组织):(organization)")
                
                
                // 职位
                let jobTitle = ABRecordCopyValue(contact, kABPersonJobTitleProperty)?.takeRetainedValue() as! String? ?? ""
                
                print("职位:(jobTitle)")
                
                
                // 部门
                let department = ABRecordCopyValue(contact, kABPersonDepartmentProperty)?.takeRetainedValue() as! String? ?? ""
                
                print("部门:(department)")
                
                
                
                //备注
                let note = ABRecordCopyValue(contact, kABPersonNoteProperty)?.takeRetainedValue() as! String? ?? ""
                
                print("备注:(note)")
                
                
                
                /*
                部分多值属性
                */
                // 电话
                let propertyValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonPhoneProperty)?.takeRetainedValue()
                
                if propertyValues != nil {
                    
                    for i in 0 ..< ABMultiValueGetCount(propertyValues)
                    {
                        //获取电话类型:(比如 工作,住宅,iphone,移动电话等)  
                        var label = ""
                        if let leixin = ABMultiValueCopyLabelAtIndex(propertyValues,i)
                        {
                            label =  leixin.takeRetainedValue() as String
                        }
                        
                        let value = ABMultiValueCopyValueAtIndex(propertyValues, i)
                        let phone = value.takeRetainedValue() as? String ?? ""
                        
                        print("(label):(phone)");
                    }
                }
                
                // E-mail
                let emailValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonEmailProperty)?.takeRetainedValue()
                
                if emailValues != nil {
                    
                    for i in 0 ..< ABMultiValueGetCount(emailValues)
                    {
                        //获取邮箱类型
                        var label = ""
                        if let leixin = ABMultiValueCopyLabelAtIndex(emailValues,i)
                        {
                            label =  leixin.takeRetainedValue() as String
                        }
                        
                        let value = ABMultiValueCopyValueAtIndex(emailValues, i)
                        let email = value.takeRetainedValue() as? String ?? ""
                        
                        print("(label):(email)");
                    }
                }
                
                // 地址
                let addressValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonAddressProperty)?.takeRetainedValue()
                
                if addressValues != nil {
                    
                    for i in 0 ..< ABMultiValueGetCount(addressValues)
                    {
                        //获取地址类型
                        var label = ""
                        if let leixin = ABMultiValueCopyLabelAtIndex(addressValues,i)
                        {
                            label =  leixin.takeRetainedValue() as String
                        }
                        
                        
                        let value = ABMultiValueCopyValueAtIndex(addressValues, i)
                        let addrNSDict:NSMutableDictionary = value.takeRetainedValue() as! NSMutableDictionary
                        
                        
                        let _Country = addrNSDict.valueForKey(kABPersonAddressCountryKey as String) as? String ?? ""
                        let _State = addrNSDict.valueForKey(kABPersonAddressStateKey as String) as? String ?? ""
                        let _City  = addrNSDict.valueForKey(kABPersonAddressCityKey as String) as? String ?? ""
                        let _Street = addrNSDict.valueForKey(kABPersonAddressStreetKey as String) as? String ?? ""
                        let _Contrycode = addrNSDict.valueForKey(kABPersonAddressCountryCodeKey as String) as? String ?? ""
                        
                        
                        print("(label)==_Country:(_Country) _State:(_State) _City:(_City) _Street:(_Street) _Contrycode:(_Contrycode)");
                    }
                }
                
                
                // 纪念日
                let dateValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonDateProperty)?.takeRetainedValue()
                
                if dateValues != nil {
                    
                    for i in 0 ..< ABMultiValueGetCount(dateValues)
                    {
                        //获取纪念日类型
                        var label = ""
                        if let leixin = ABMultiValueCopyLabelAtIndex(dateValues,i)
                        {
                            label =  leixin.takeRetainedValue() as String
                        }
                        
                        let value = ABMultiValueCopyValueAtIndex(dateValues, i)
                        let date = (value.takeRetainedValue() as? NSDate)?.description
                        
                        print("(label):(date)");
                    }
                }
                
                
                // URL
                let urlValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonURLProperty)?.takeRetainedValue()
                
                if urlValues != nil {
                    
                    for i in 0 ..< ABMultiValueGetCount(urlValues)
                    {
                        //获取URL类型
                        var label = ""
                        if let leixin = ABMultiValueCopyLabelAtIndex(urlValues,i)
                        {
                            label =  leixin.takeRetainedValue() as String
                        }
                        
                        let value = ABMultiValueCopyValueAtIndex(urlValues, i)
                        let url = value.takeRetainedValue() as? String ?? ""
                        
                        print("(label):(url)");
                    }
                }
                
                
                // SNS
                let snsValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonSocialProfileProperty)?.takeRetainedValue()
                
                if snsValues != nil {
                    
                    for i in 0 ..< ABMultiValueGetCount(snsValues)
                    {
                        //获取SNS类型
                        var label = ""
                        if let leixin = ABMultiValueCopyLabelAtIndex(snsValues,i)
                        {
                            label =  leixin.takeRetainedValue() as String
                        }
                        
                        
                        let value = ABMultiValueCopyValueAtIndex(snsValues, i)
                        
                        let snsNSDict:NSMutableDictionary = value.takeRetainedValue() as! NSMutableDictionary
                        
                        let _Username = snsNSDict.valueForKey(kABPersonSocialProfileUsernameKey as String) as? String ?? ""
                        let _URL = snsNSDict.valueForKey(kABPersonSocialProfileURLKey as String) as? String ?? ""
                        let _Serves = snsNSDict.valueForKey(kABPersonSocialProfileServiceKey as String) as? String ?? ""
                        
                        print("(label)==_Username:(_Username) _URL:(_URL) _Serves:(_Serves)");
                    }
                }
                
                
                // IM
                let imValues:ABMultiValueRef? = ABRecordCopyValue(contact, kABPersonInstantMessageProperty)?.takeRetainedValue()
                
                if imValues != nil {
                    
                    for i in 0 ..< ABMultiValueGetCount(imValues)
                    {
                        //获取IM类型
                        var label = ""
                        if let leixin = ABMultiValueCopyLabelAtIndex(imValues,i)
                        {
                            label =  leixin.takeRetainedValue() as String
                        }
                        
                        let value = ABMultiValueCopyValueAtIndex(imValues, i)
                        
                        let imNSDict:NSMutableDictionary = value.takeRetainedValue() as! NSMutableDictionary
                        
                        let _Serves = imNSDict.valueForKey(kABPersonInstantMessageServiceKey as String) as? String ?? ""
                        let _Username = imNSDict.valueForKey(kABPersonInstantMessageUsernameKey as String) as? String ?? ""
                        
                        print("(label)==_Serves:(_Serves) _Username:(_Username)");
                    }
                }
                
                
        }
        }

    新增联系人:

     1 //新增联系人
     2     @IBAction func addPeople ()
     3     {
     4         //取得电话薄句柄
     5         var error:Unmanaged<CFError>?
     6         let addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
     7         
     8         //创建一个联系人对象
     9         let newContact:ABRecordRef! = ABPersonCreate().takeRetainedValue()
    10         var success:Bool = false
    11         
    12         //昵称
    13         success = ABRecordSetValue(newContact, kABPersonNicknameProperty, "Gaven", &error)
    14         print("设置昵称是否成功: (success)")
    15         
    16         //设置姓
    17         success = ABRecordSetValue(newContact, kABPersonFirstNameProperty, "zhang", &error)
    18         print("设置姓是否成功: (success)")
    19         
    20         //设置名
    21         success = ABRecordSetValue(newContact, kABPersonLastNameProperty, "wu", &error)
    22         print("设置名是否成功:(success)")
    23         
    24         //设置电话
    25         let tmpMutableMultiPhones:ABMutableMultiValue = ABMultiValueCreateMutable(
    26             ABPropertyType(kABStringPropertyType)).takeRetainedValue()
    27         
    28         success = ABMultiValueAddValueAndLabel(tmpMutableMultiPhones, "15901234000", "companyPhone", nil);
    29         print("设置电话标题是否成功:(success)")
    30         
    31         success = ABRecordSetValue(newContact, kABPersonPhoneProperty, tmpMutableMultiPhones, nil)
    32         print("设置电话是否成功:(success)")
    33         
    34         //设置邮箱
    35         let addr:ABMutableMultiValue = ABMultiValueCreateMutable(
    36             ABPropertyType(kABStringPropertyType)).takeRetainedValue()
    37         ABMultiValueAddValueAndLabel(addr, "185@leadingdo.com", "companyEmail", nil)
    38         print("设置邮箱标题是否成功:(success)")
    39         
    40         ABRecordSetValue(newContact, kABPersonEmailProperty, addr, nil)
    41         print("设置邮箱是否成功:(success)")
    42         
    43         //保存记录
    44         success = ABAddressBookAddRecord(addressBook, newContact, &error)
    45         print("保存记录是否成功:? (success)")
    46         
    47         //保存数据库
    48         success = ABAddressBookSave(addressBook, &error)
    49         print("修改数据库是否成功: (success)")
    50     }

    删除联系人:

     1 //删除联系人
     2     @IBAction func deletePeople()
     3     {
     4         //定义错误标记
     5         var error:Unmanaged<CFError>?
     6         
     7         //取得电话薄句柄
     8         let addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
     9         
    10         //读取通讯录
    11         let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()
    12         
    13         if sysAddressBookStatus == .Denied || sysAddressBookStatus == .NotDetermined {
    14             // Need to ask for authorization
    15             let authorizedSingal:dispatch_semaphore_t = dispatch_semaphore_create(0)
    16             let askAuthorization:ABAddressBookRequestAccessCompletionHandler = { success, error in
    17                 if success {
    18                     ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray
    19                     dispatch_semaphore_signal(authorizedSingal)
    20                 }
    21             }
    22             ABAddressBookRequestAccessWithCompletion(addressBook, askAuthorization)
    23             dispatch_semaphore_wait(authorizedSingal, DISPATCH_TIME_FOREVER)
    24         }
    25         
    26         let sysContacts:NSArray  =  ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray
    27         
    28         
    29         //遍历通讯录
    30         for contact in sysContacts {
    31             
    32             //
    33             let firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as! String? ?? ""
    34             
    35             
    36             print("姓:(firstName)")
    37             
    38             //
    39             let lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as! String? ?? ""
    40             
    41             
    42             print("名:(lastName)")
    43             
    44             var success:Bool = false
    45             
    46             if firstName == "zhang" && lastName == "wu"
    47             {
    48                  success = ABAddressBookRemoveRecord(addressBook, contact, nil);
    49                 print("删除是否成功: (success)")
    50             }
    51             
    52             //保存数据库
    53             success = ABAddressBookSave(addressBook, &error)
    54             print("修改数据库是否成功: (success)")
    55         }
    56     }

    2)界面打开地址薄

    //UI打开地址薄
        @IBAction func uiToAddressButtonClick()
        {
            let picker = ABPeoplePickerNavigationController()
            picker.peoplePickerDelegate = self
            self.presentViewController(picker, animated: true, completion: { () -> Void in
                
            })
        }

    代理方法:

     1 // MARK: - ABPeoplePickerNavigationControllerDelegate
     2     func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord)
     3     {
     4         //
     5         let firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as! String? ?? ""
     6         
     7         print("选中人的姓:(firstName)")
     8         
     9         
    10         //
    11         let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty)?.takeRetainedValue() as! String? ?? ""
    12         
    13         print("选中人的名:(lastName)")
    14     }
    15     
    16     func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier)
    17     {
    18         
    19 
    20     }
    21     
    22     func peoplePickerNavigationControllerDidCancel(peoplePicker: ABPeoplePickerNavigationController)
    23     {
    24         //取消
    25         peoplePicker.dismissViewControllerAnimated(true, completion: { () -> Void in
    26             
    27         })
    28     }
    29     
    30     func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, shouldContinueAfterSelectingPerson person: ABRecord) -> Bool
    31     {
    32         return true
    33     }
    34     
    35     func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, shouldContinueAfterSelectingPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier) -> Bool
    36     {
    37         return true
    38     }

    2、短信、电话、邮件

    引入框架MessageUI.framework,实现UINavigationControllerDelegate,MFMessageComposeViewControllerDelegate。

    1)短信

     1 //发短信
     2     //    添加MessageUI.framework框架
     3     //
     4     //    为ViewController类
     5     //    添加UINavigationControllerDelegate, MFMessageComposeViewControllerDelegate 接口
     6     //    实现func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult)
     7     @IBAction func sendSMSButtonClick()
     8     {
     9         //判断
    10         if MFMessageComposeViewController.canSendText(){
    11             let controller = MFMessageComposeViewController()
    12             
    13             // 设置短信内容
    14             controller.body = "短信内容短信内容"
    15             
    16             // 设置收件人列表
    17             controller.recipients = ["15900001111,18900001111,17011112222"]
    18             
    19             //设置代理
    20             controller.messageComposeDelegate = self
    21             
    22             //打开界面
    23             self.presentViewController(controller, animated: true, completion: nil)
    24         } else {
    25             let alert = UIAlertView(title: "提示信息", message: "本设备不能发短信", delegate: nil, cancelButtonTitle: "确定")
    26             alert.show()
    27         }
    28     }
     1 //代理
     2     func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult)
     3     {
     4         controller.dismissViewControllerAnimated(true, completion: nil)
     5 
     6         switch result.rawValue{
     7             
     8             case MessageComposeResultSent.rawValue:
     9                 print("短信已发送")
    10             case MessageComposeResultCancelled.rawValue:
    11                 print("短信已取消")
    12             case MessageComposeResultFailed.rawValue:
    13                 print("短信发送失败")
    14             default:
    15                 break
    16         }
    17     }

    2)拨打电话

    //打电话
        @IBAction func phoneButtonClick()
        {
            //调用打电话功能--最简单最直接的方式:直接跳到拨号界面
            UIApplication.sharedApplication().openURL(NSURL(string: "tel://10086")!)
            
        }

    3)发邮件

     1 //发邮件
     2     @IBAction func sendEmailButtonClick()
     3     {
     4         if MFMailComposeViewController.canSendMail()
     5         {
     6             let picker = MFMailComposeViewController()
     7             picker.mailComposeDelegate = self
     8             
     9             //设置主题
    10             picker.setSubject("这是一个主题")
    11             
    12             //设置发件人
    13             picker.setToRecipients(["1@leadingdo.com","2@leadingdo.com","3@leadingdo.com"])
    14             
    15             //设置抄送人
    16             picker.setCcRecipients(["cc1@leadingdo.com","cc2@leadingdo.com"])
    17             
    18             //设置密送人
    19             picker.setBccRecipients(["bcc@leadingdo.com"])
    20             
    21             //添加图片附件
    22             let path = NSBundle.mainBundle().pathForResource("SwiftClassWeiXin.png", ofType: "")
    23             let myData = NSData(contentsOfFile: path!)
    24             picker.addAttachmentData(myData!, mimeType: "image/png", fileName: "swift.png")
    25         
    26             //设置邮件正文内容-支持html
    27             picker.setMessageBody("这是邮件正文", isHTML: false)
    28             
    29             //打开界面
    30             self.presentViewController(picker, animated: true, completion: nil)
    31         }
    32         else
    33         {
    34             let alert = UIAlertView(title: "提示信息", message: "本设备不能发邮件", delegate: nil, cancelButtonTitle: "确定")
    35             alert.show()
    36         }
    37     }
     1 //发送邮件代理方法
     2     func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?)
     3     {
     4         controller.dismissViewControllerAnimated(true, completion: nil)
     5         
     6         switch result.rawValue{
     7             case MFMailComposeResultCancelled.rawValue:
     8                 print("邮件已取消")
     9             break;
    10             case MFMailComposeResultSaved.rawValue:
    11                 print("邮件已保存")
    12             break;
    13                 case MFMailComposeResultSent.rawValue:
    14                 print("邮件已发送")
    15             break;
    16                 case MFMailComposeResultFailed.rawValue:
    17                 print("邮件发送失败")
    18             break;
    19             default:
    20                 print("邮件没有发送")
    21             break;
    22         }
    23     }
  • 相关阅读:
    Java经典面试题及详解
    linux nc命令使用详解
    终端下更改文件显示颜色
    第二章 IoC Setter注入
    网络抓包wireshark
    一些软件软件开发原则
    开发原则之约定大于配置
    2016第31周六
    2016第31周五
    2016年第31周四
  • 原文地址:https://www.cnblogs.com/fengmin/p/5718757.html
Copyright © 2011-2022 走看看