调用电话、邮箱、短信功能
引言:
应用中经常会用到调用系统打电话、发信息、发邮件等功能,下面一一实现。
# 一. 打电话
# 1. 方式一
// 最简单最直接的方式: 直接跳转到拨号界面
// 缺点: 拨打电话完毕后, 不会自动回到原应用界面, 直接停留在通话记录界面
NSURL *url = [NSURL URLWithString:@"tel://10086"];
[[UIApplication sharedApplication] openURL:url];
# 2. 方式二
// 拨号之前会弹框询问用户是否拨号, 拨号完毕后会直接回到原应用
// 缺点: 因为是私有API, 所以可能会被拒掉
NSURL *url = [NSURL URLWithString:@"telprompt://10086"];
[[UIApplication sharedApplication] openURL:url];
# 3. 方式三
/**
* 创建一个UIWebView来加载url, 拨号后能自动回到原应用
*
* 拨号之前会弹框询问用户是否拨号, 拨号完毕后自动回到原应用
*
* 注意: webView不要设置尺寸, 不然会遮挡住其他界面 只是用来打电话,不需要显示
*/
NSURL *url = [NSURL URLWithString:@"tel://10086"];
if (_webView == nil) {
_webView = [[UIWebView alloc] initWithFrame:(CGRectZero)];
}
[_webView loadRequest:[NSURLRequest requestWithURL:url]];
# 二. 发短信
# 1. 方式一
// 直接跳转到发短信界面, 但是不能指定短信内容, 而且不能返回到原应用
NSURL *url = [NSURL URLWithString:@"sms://15084089244"];
[[UIApplication sharedApplication] openURL:url];
# 2. 方式二
1 如果想指定短信内容, 使用MessageUI框架
//1. 导入头文件
//2. 显示发短信的控制器
MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
//3. 设置短信内容
messageVC.body = @"吃饭了?";
//4. 设置收件人列表(可以添加多个)
messageVC.recipients = @[@"13917714464", @"15084089244"];
//5. 设置代理
messageVC.messageComposeDelegate = self;
[self presentViewController:messageVC animated:YES completion:nil];
2 代理方法:
// 当短信界面关闭的时候调用, 发完后会自动回到原应用
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
// 关闭短信界面
[controller dismissViewControllerAnimated:YES completion:nil];
if (result == MessageComposeResultCancelled) {
NSLog(@"取消发送");
}else if (result == MessageComposeResultSent){
NSLog(@"已经发出");
}else{
NSLog(@"发送失败");
}
}
# 三. 发邮件
# 1. 方式一:
// 调用系统自带的邮件客户端, 发完邮件后不会自动回到原应用
NSURL *url = [NSURL URLWithString:@"mailro://244344094@qq.com"];
[[UIApplication sharedApplication] openURL:url];
# 2. 方式二:
// 指定邮件内容, 和发短信方式2 差不多. 使用
MFMailComposeViewController *emailVC = [[MFMailComposeViewController alloc] init];
emailVC.mailComposeDelegate = self;