注意: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. ubuntu的apt

    1. apt edit-sources  #编辑apt的源列表( 或者直接写这个命令:vim /etc/apt/sources.list ) 2. apt list   #列出包含条件的包(已安装,可 ...

  2. C语言:判断t所指字符串中的字母是否由连续递增字母组成。-判断一个输入的任何整数n,是否等于某个连续正整数序列之和。-将一副扑克牌编号为1到54,以某种方式洗牌,这种方式是将这副牌分成两半,然后将他们交叉,并始终保持编号1的牌在最上方。

    //判断t所指字符串中的字母是否由连续递增字母组成. #include <stdio.h> #include <string.h> void NONO(); int fun( ...

  3. 计算机二级-C语言-程序填空题-190115记录-fprintf()函数和fscanf()函数的使用。

    //给定程序,函数fun的功能是:将自然数1~10以及它们的平方根写到名为myflie3.txt的文本文件中,然后再顺序读出显示在屏幕上. //重难点:fprintf()函数和fscanf()函数的使 ...

  4. python numpy的var std cov研究

    var:表示方差, 即各项-均值的平方求和后再除以N , std:表示标准差,是var的平方根. cov:协方差 ,与var类似,但是除以(N-1) import numpy as np # 构建测试 ...

  5. 不是充许的静态以太网地址,它与vmware保留的mac地址冲突

    不是充许的静态以太网地址,它与vmware保留的mac地址冲突 只需修改vxm文件即可. 第一部,打开vmw的镜像位置,如图. 点击后,打开硬盘,如下 把这个vmx结尾的文件下载,在本地编辑,可用tx ...

  6. 多进程 多进程queue

    多进程 import multiprocessing import threading import time def thread_run(): print(threading.get_ident( ...

  7. 【SSM 下载】下载文件

    111111111 /** * 导出客户数据 */ @RequestMapping("exportCustomer") public ResponseEntity<Objec ...

  8. 第一节:Vuejs入门之各种指令

    一. 简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上 ...

  9. 「JSOI2014」打兔子

    「JSOI2014」打兔子 传送门 首先要特判 \(k \ge \lceil \frac{n}{2} \rceil\) 的情况,因为此时显然可以消灭所有的兔子,也就是再环上隔一个点打一枪. 但是我们又 ...

  10. liux 防火墙以及开关

    一.service方式 查看防火墙状态: [root@centos6 ~]# service iptables status iptables:未运行防火墙. 开启防火墙: [root@centos6 ...