注意:iOS10.0以后,使用openURL会有延迟,需要使用

openURL: options: completionHandler:

一、概要

本文中主要就是介绍在iOS中实现打电话、发短信、发邮件三个功能。

每种功能都会给出不同的方法,亲测有效~

1、打电话

(1)直接跳到拨号界面,代码如下

NSURL *url = [NSURL URLWithString:@"tel://10010"];
[[UIApplication sharedApplication] openURL:url];

缺点:电话打完后,不会自动回到原应用,直接停留在通话记录界面。

(2)拨号之前会弹框询问,打完电话后能自动回到原应用。代码如下:

NSURL *url = [NSURL URLWithString:@"telprompt://10010"];
[[UIApplication sharedApplication] openURL:url];

缺点:私有API,因此可能通不过苹果官方审核。如果是企业级应用(不需要上线appStore),可以使用这个方法。

(3)创建一个UIWebView来加载URL,拨完后能自动回到原应用。代码如下:

UIWebView *webView = [[UIWebView alloc]init];
NSURL *url = [NSURL URLWithString:@"tel://10010"];
[webView loadRequest:[NSURLRequest requestWithURL:url ]];

推荐使用:

+ (void)callPhoneWithNumber:(NSString *)telephoneNumber
{
if (telephoneNumber.length == ) {
return;
}
NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@", telephoneNumber];
CGFloat version = [[[UIDevice currentDevice]systemVersion]floatValue];
if (version >= 10.0) {
/// 大于等于10.0系统使用此openURL方法
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone] options:@{} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
}
}

听说但没有验证:

iOS10.2之前,那个是否确定拨打电话的提示框需要自己添加展示;iOS10.2以后,系统自动添加展示。

2、发短信

(1)直接跳转到发短信界面。代码:

NSURL *url = [NSURL URLWithString:@"sms://10010"];
[[UIApplication sharedApplication] openURL:url];

缺点:不能定义发送短信的内容,且发完短信后不能自动回到原应用。

(2)使用MessageUI 框架发送短信,需要包含头文件 #import <MessageUI/MessageUI.h>,代码如下:

MFMessageComposeViewController *vc = [[MFMessageComposeViewController alloc]init];
//设置短信内容
vc.body = @"吃饭了没";
//设置收件人列表
vc.recipients = @[@"",@""];
//设置代理
vc.messageComposeDelegate = self;
//显示控制器
[self presentViewController:vc animated:YES completion:nil];

另外实现代理函数

/**
* 点击取消按钮会自动调用
*/
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
[controller dismissViewControllerAnimated:YES completion:nil];
}

3、发邮件

(1)用自带的邮件客户端,代码如下:

NSURL *url = [NSURL URLWithString:@"mailto://10010@qq.com"];
[[UIApplication sharedApplication] openURL:url];

缺点:发完邮件后不会自动回到原应用。

(2)类似于发短信的第二种方法,使用MessageUI,代码如下:

if(![MFMailComposeViewController canSendMail]) return;
MFMailComposeViewController *vc = [[MFMailComposeViewController alloc] init];
//设置邮件主题
[vc setSubject:@"测试会议"];
//设置邮件内容
[vc setMessageBody:@"开会" isHTML:NO];
//设置收件人列表
[vc setToRecipients:@[@"test@qq.com"]];
//设置抄送人列表
[vc setCcRecipients:@[@"test1@qq.com"]];
//设置代理
vc.mailComposeDelegate = self;
//显示控制器
[self presentViewController:vc animated:YES completion:nil];

实现代理方法:

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
[controller dismissViewControllerAnimated:YES completion:nil];
}

iOS10打电话、发短信、发邮件等小功能的更多相关文章

  1. ios 设置亮度、声音;调用发短信、邮件、打电话

    一,设置亮度 [[UIScreen mainScreen] setBrightness:0.5];//0.0~1.0 二,设置声音 1,添加 MediaPlayer.framework 框架 2,在需 ...

  2. Android实例-打电话、发短信和邮件,取得手机IMEI号(XE8+小米2)

    结果: 1.不提示发短信卡住,点击没有反映,我猜想,可能是因为我用的是小米手机吧. 2.接收短信报错,我猜想可能是我改了里面的方法吧(哪位大神了解,求指教). 3.project -->opti ...

  3. 打电话,发短信,发邮件,app跳转

    1.打电话 - (IBAction)callPhone1:(id)sender { NSURL *url = [NSURL URLWithString:@"tel://18500441739 ...

  4. iOS 打电话、发短信、邮件、打开网址、调用应用等合集

    iOS中的很多功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等,这里总结几个比较常用的: 1.打电话 方式一:最简单最直接的方式:直接跳到拨号界面 NSURL *url = ...

  5. h5打电话发短信写邮件怎么实现

    // 一.打电话<a href="tel:0755-10086">打电话给:0755-10086</a> // 二.发短信,winphone系统无效< ...

  6. a链接 打电话 发短信 发email

    <a href="tel:10086">给10086打电话</a><a href="sms:10086">给10086发短信 ...

  7. 今天工作遇到要发短信(ios)的功能,于是随手记录了一下

    ios中发送短信有两种 1.程序外调用系统短信 2.程序内调用系统发短信 第一种比较简单,直接调用url就可以了 oc下的代码为 [[UIApplication sharedApplication] ...

  8. IOS中调用系统的电话、短信、邮件、浏览功能

    iOS开发系列--通讯录.蓝牙.内购.GameCenter.iCloud.Passbook系统服务开发汇总 2015-01-13 09:16 by KenshinCui, 26990 阅读, 35 评 ...

  9. iOS开发——发短信,邮件

    在IOS开发中,有时候我们会需要用到邮件发送的功能.比如,接收用户反馈和程序崩溃通知等等,这个功能是很常用的.在苹果系统中,如果彼此的手机都是iOS设备,并且开通了iMessage功能,那么彼此之间的 ...

  10. ios-王云鹤 调用ios系统功能---------------打电话、发短信、发邮件

    --------------------------------------菜鸟总结,欢迎读者雅正------------------------------------------------- 先 ...

随机推荐

  1. ARM相关概念(学习目标、分类、商业模式及半导体公司、嵌入式处理器)

    1.学习ARM的目标 (1)对比X86,8051汇编,从更底层的角度去理解相关知识 (2)为后续嵌入式课程做准备 (3)了解ARM的体系结构,能够看懂ARM汇编 2.ARM分类 (1)按照版本号分类: ...

  2. nginx+keepalived实现主从高可用

    设备: 主:192.168.200.122 从:192.168.200.124 安装:两台都分别安装nginx以及keepalived 两台机步骤一致一主一从 安装nginx的依赖包 [root@lo ...

  3. input type=range 进度条的自定义样式

    /* 自定义进度条样式 */ .v_my input[type=range] { -webkit-appearance: none;/*清除系统默认样式*/ width: .8rem; backgro ...

  4. SQL Server 2014数据库开启远程连接(Windows Server 2016)

    1.打开SQL SERVER 配置管理器 2. 设置防火墙的入站规则 3.使用Navicat Premium连接SQL Server 

  5. 安卓开发:在Mac系统中搭建安卓开发环境

    第一步:检查下自己的电脑上有没有安装JDK(Java Development Kit)(2019年7月安装的最新版是JDK 1.8.0_181版本),通过在终端中输入"java -versi ...

  6. PHP将json或对象转成数组

    今天老大突然给了我一个小任务,给我一个txt文件,里边是很多的json字串,要求将这些字串转换成php中的数组: 于是开足火力,用了将进5分钟的时间完成了任务,代码如下: $jsonStr = fil ...

  7. zabbix邮件脚本报警

    #启动邮箱服务 systemctl start postfix.service #配置用户的邮箱发送邮件 vim /etc/mail.rc set from="xxx@xxx.com&quo ...

  8. :after/::after和:before/::before的异同

    相同点 都可以用来表示伪类对象,用来设置对象前的内容:before和::before写法是等效的; :after和::after写法是等效的不同点 :before/:after是Css2的写法,::b ...

  9. 标准类 (Java Bean)

    一个标准类通常包括四个部分: 1.所有成员变量都要用 private 关键字修饰 2.为每一个成员变量编写一对 Getter/Setter 方法 3.编写一个无参数的构造方法 4.编写一个全参数的构造 ...

  10. 洛谷 P5019 铺设道路(差分)

    嗯... 题目链接:https://www.luogu.org/problem/P5019 首先简化一下题意: 给定一个长为N的数组,每次操作可以选择一个区间减去1,问最少多少次操作可以将数组中的数全 ...