1、调用电话

1.1 拨打系统电话

  • 调用系统自带的打电话程序,要跳转到打电话程序,打完电话自动跳转回来。

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:tel://电话号码

  • iOS 系统版本 < 10.0

        NSURL *url = [NSURL URLWithString:@"tel://10086"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url];} else {NSLog(@"没有安装应用");}
  • iOS 系统版本 >= 10.0

        NSURL *url = [NSURL URLWithString:@"tel://10086"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];} else {NSLog(@"没有安装应用");}

1.2 拨打电话

  • 在应用内部打电话,不需要跳出程序,完全在自己的程序中,打完电话自动跳转回来。

        UIWebView *callWebView = [[UIWebView alloc] init];NSURL *url = [NSURL URLWithString:@"tel:10086"];[callWebView loadRequest:[NSURLRequest requestWithURL:url]];[self.view addSubview:callWebView];

2、调用短信

2.1 调用系统短信

  • 调用系统自带的信息程序,要跳转到信息程序,发完短信后不会跳转回来。

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:sms://电话号码

  • iOS 系统版本 < 10.0

        NSURL *url = [NSURL URLWithString:@"sms://10086"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url];} else {NSLog(@"没有安装应用");}
  • iOS 系统版本 >= 10.0

        NSURL *url = [NSURL URLWithString:@"sms://10086"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];} else {NSLog(@"没有安装应用");}

2.2 带内容发送短信

  • 在应用内部发送短信,不需要跳出程序,完全在自己的程序中,发送短信后自动跳转回来。可以在程序中设置发送的短信内容。

  • 添加 MessageUI.framework 框架。

  • 在发起发送短信的视图控制器中

        // 引入头文件#import <MessageUI/MessageUI.h>// 遵守协议<MFMessageComposeViewControllerDelegate>
  • 发送短信

        if ([MFMessageComposeViewController canSendText]) {MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];messageVC.messageComposeDelegate = self;// 设置电话号码messageVC.recipients = @[@"10086"];// 设置短信内容messageVC.body = @"话费余额";// 调用系统发送短信界面[self presentViewController:messageVC animated:YES completion:nil];}
  • 处理发送响应结果

        // MFMessageComposeViewControllerDelegate 协议方法- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {[self dismissViewControllerAnimated:YES completion:nil];if (result == MessageComposeResultCancelled) {NSLog(@"Message cancelled");} else if (result == MessageComposeResultSent) {NSLog(@"Message sent");} else {NSLog(@"Message failed");}}

3、调用邮件

3.1 发送系统邮件

  • 调用系统自带的邮件程序,要跳转到邮件程序,发完邮件后不会跳转回来。

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:mailto://邮件地址

  • iOS 系统版本 < 10.0

        NSURL *url = [NSURL URLWithString:@"mailto://qq0228@163.com"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url];} else {NSLog(@"没有安装应用");}
  • iOS 系统版本 >= 10.0

        NSURL *url = [NSURL URLWithString:@"mailto://qq0228@163.com"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];} else {NSLog(@"没有安装应用");}

3.2 带内容发送邮件

  • 在应用内部发送邮件,不需要跳出程序,完全在自己的程序中,发送邮件后自动跳转回来。可以在程序中设置发送的邮件内容。

  • 添加 MessageUI.framework 框架。

  • 在发起发送邮件的视图控制器中

        // 引入头文件#import <MessageUI/MessageUI.h>// 遵守协议<MFMailComposeViewControllerDelegate>
  • 发送邮件

        if ([MFMailComposeViewController canSendMail]) {MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];mailVC.mailComposeDelegate = self;// 设置邮箱[mailVC setToRecipients:@[@"qq0228@163.com"]];// 设置邮件主题[mailVC setSubject:@"Hello"];// 设置邮件内容[mailVC setMessageBody:@"Lorem ipsum dolor sit amet" isHTML:NO];// 调用系统发送邮件界面[self presentViewController:mailVC animated:YES completion:nil];}
  • 处理发送响应结果

        // MFMailComposeViewControllerDelegate 协议方法- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {[self dismissViewControllerAnimated:YES completion:nil];if (result == MFMailComposeResultCancelled) {NSLog(@"Message cancelled");} else if (result == MFMailComposeResultSent) {NSLog(@"Message sent");} else if (result == MFMailComposeResultSaved) {NSLog(@"Message saved");} else {NSLog(@"Message failed");}}

4、调用地图

4.1 调用系统地图

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:maps://

  • iOS 系统版本 < 10.0

        NSURL *url = [NSURL URLWithString:@"maps://"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url];} else {NSLog(@"没有安装应用");}
  • iOS 系统版本 >= 10.0

        NSURL *url = [NSURL URLWithString:@"maps://"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];} else {NSLog(@"没有安装应用");}

5、调用浏览器

51 调用系统浏览器

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:http://网址 或:https://网址

  • iOS 系统版本 < 10.0

        NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url];} else {NSLog(@"没有安装应用");}
  • iOS 系统版本 >= 10.0

        NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];} else {NSLog(@"没有安装应用");}

6、调用应用商店

6.1 调用系统应用商店

  • 找到应用程序的描述链接,然后将 http:// 替换为 itms:// 或者 itms-apps://。比如:

        http://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8itms-apps://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8itms://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
  • URL 地址:itms-apps://网址 或:itms://网址

        itms-apps://            // 调用系统 App Store 应用itms://                 // 调用系统 iTunes Store 应用
  • iOS 系统版本 < 10.0

        NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url];} else {NSLog(@"没有安装应用");}
  • iOS 系统版本 >= 10.0

        NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8"];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];} else {NSLog(@"没有安装应用");}

7、保存图片到相册

  • 设置系统访问相册权限

  • 保存图片到相册

        // 将图片存储到相册中UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
        // 将图片存储到相册中,完成后调用指定的方法UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);// 保存完成后调用的方法,必须为这个方法- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {}

8、访问通讯录

  • 详细讲解见 iOS - Contacts 通讯录

9、获取 wifi 信息

9.1 获取 wifi 名称信息

  • 具体实现代码见 GitHub 源码 QExtension

        #import <SystemConfiguration/CaptiveNetwork.h>NSString * const BSSIDKey = @"BSSID";NSString * const SSIDKey = @"SSID";NSString * const SSIDDATAKey = @"SSIDDATA";// 获取当前 Wifi 信息+ (NSDictionary *)q_getCurrentWifiInfo {NSDictionary *wifiDic = [NSDictionary dictionary];CFArrayRef arrayRef = CNCopySupportedInterfaces();if (arrayRef != nil) {CFDictionaryRef dicRef = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(arrayRef, 0));CFRelease(arrayRef);if (dicRef != nil) {wifiDic = (NSDictionary *)CFBridgingRelease(dicRef);}}return wifiDic;}
        // 获取当前 Wifi 信息NSDictionary *wifiInfo = [NSDictionary q_getCurrentWifiInfo];NSLog(@"%@", wifiInfo);NSString *bssid = wifiInfo[BSSIDKey];NSString *ssid = wifiInfo[SSIDKey];NSString *ssidData = [[NSString alloc] initWithData:wifiInfo[SSIDDATAKey] encoding:NSUTF8StringEncoding];NSLog(@"%@\n %@\n %@", bssid, ssid, ssidData);

9.2 获取 IP 地址

  • 具体实现代码见 GitHub 源码 QExtension

        #import <arpa/inet.h>#import <ifaddrs.h>// 获取本地 IP 地址+ (NSString *)q_getIPAddress {NSString *address = @"error";struct ifaddrs *interfaces = NULL;struct ifaddrs *temp_addr = NULL;int success = 0;// retrieve the current interfaces - returns 0 on successsuccess = getifaddrs(&interfaces);if (success == 0) {// Loop through linked list of interfacestemp_addr = interfaces;while (temp_addr != NULL) {if (temp_addr->ifa_addr->sa_family == AF_INET) {// Check if interface is en0 which is the wifi connection on the iPhoneif ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {// Get NSString from C Stringaddress = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];}}temp_addr = temp_addr->ifa_next;}}// Free memoryfreeifaddrs(interfaces);return address;}
        // 获取本地 IP 地址NSString *ipStr = [NSString q_getIPAddress];NSLog(@"%@", ipStr);

iOS - Phone 电话相关推荐

  1. iOS拨打电话的三种方法

    iOS里面在程序里面实现拨打电话的方式,略知以下三种方法: ps:其实仔细看起来没什么特殊的,但要特殊注意代码里面的关键词(下面用红色标出以作区别) 1.此方法,拨打完电话但是回不到原来的应用,会停留 ...

  2. iOS 拨打电话三种方式总结

    原文发表于http://blog.csdn.net/ouy_huan/article/details/30506925 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹 ...

  3. iOS VoIP电话:CallKit与PushKit的应用

    苹果在WWDC2016推出了iOS10系统新功能CallKit,可以调起系统的电话接听页,配合iOS8推出的PushKit使用,形成了一套完整的VoIP解决方案.这篇文章主要记录了实现VoIP时遇到的 ...

  4. iOS开发经验总结,我的2019进阶之路!

    4G改变了生活,抓住机会的人已经在这个社会有了立足之地,马上迎来5G的时代,你做好准备了吗!对于即将迎来的5G时代,无疑会是音视频的又一个高潮!那么作为程序员的我们,应该怎么样去迎接它呢~~ 改变带来 ...

  5. 支持防骚扰的iOS 10来了,网络电话成受益者

    今天,苹果正式推送iOS 10.作为第十代iOS,这次更新让人眼花缭乱:更强大的通知栏.更智能的Siri.更好玩的iMessage.更聪明的照片应用.作为第十代iOS,iOS 10前所未有的开放,部分 ...

  6. iOS 10来了!迎来黄金赛道的网络电话拼什么?

    今天,苹果正式推送iOS 10.作为第十代iOS,这次更新让人眼花缭乱:更强大的通知栏.更智能的Siri.更好玩的iMessage.更聪明的照片应用.作为第十代iOS,iOS 10前所未有的开放,部分 ...

  7. apicloud 导入通讯录获取人名与电话 拨打电话

    api.openContacts( function ( ret, err ) {if ( ret && ret.status ) {var name = ret.name;var p ...

  8. iOS Call Kit for VOIP

    http://www.jianshu.com/p/3bf73a293535 最近苹果 iOS 10 新发布了一个新的框架Call Kit,使第三方VOIP类型语音通话类APP有了更好的展现方式和用户体 ...

  9. iOS - 逆向工程

    公司最近搞得物联网项目,很注重安全,对于我这种架构师,当然考虑到APP使用上的安全.分享一篇逆向基础文章. 1.ios逆向工程指的是在软件层面上进行逆向分析的一个过程.如果想要达到对ios软件较强的逆 ...

最新文章

  1. 图解半监督学习FixMatch,只用10张标注图片训练CIFAR10
  2. 计算机操作系统_计算机理论(操作系统概念及常见操作系统类型)
  3. 问题 1044: [编程入门]三个字符串的排序
  4. 论文浅尝 - CIKM2020 | 用于推荐系统的多模态知识图谱
  5. 附9 elasticsearch-curator + Linux定时任务
  6. sklearn保存svm分类模型_机器学习100天-Day1601线性支持向量机分类
  7. Flutter进阶—质感设计之卡片
  8. 输入符号,宽,高,打印此符号组成的矩形
  9. Jacobian矩阵、Hessian矩阵
  10. Java中使用各种方式实现网页跳转
  11. 块元素和行内元素的说明及转换
  12. 基于openpose的人体姿态识别部署详细过程
  13. 怎样使用LeapFTP,LeapFTP使用教程,如何使用LeapFTP上传网站源代码(图解)
  14. PHP的时间增加10分钟和加一天的时间
  15. PHP icbc工商银行开放平台聚合支付,二维码扫码支付对接步骤
  16. 中科大计算机本科毕业论文范文,中科大本科生毕业论文格式.pdf
  17. 在哪里能学到计算机基础知识,电脑基础知识学习
  18. 思科下一代模拟器EVE-NG镜像导入
  19. python 累乘函数_python之函数(二)
  20. x264学习(2)——x264命令行参数解释

热门文章

  1. 声卡loopback有什么用_声卡购买须知,别买来又退整麻烦事的
  2. mybatis xml sql
  3. 如何安装mysql 5.6_如何安装MySQL 5.6?
  4. HttpClient 使用证书访问https站点
  5. dbeaver默认值怎么设置_电脑没声音怎么办,峰哥教你如何解决
  6. linux默认网关地址,linux shell 获取默认网关地址
  7. oracle中断进程,中断ORACLE数据库关闭进程导致错误案例
  8. VScode使用Git拉取代码到本地提示“在签出前,请清理存储工作树”
  9. linux的网卡部分
  10. 忘记mysql密码的一种解决办法