博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS- 如何将应用集成发短信、发邮件、打电话
阅读量:5298 次
发布时间:2019-06-14

本文共 3595 字,大约阅读时间需要 11 分钟。

1.发短信           

实现打电话的功能,主要二种方法,下面就分别说说它们的优缺点。

1.1.发短信(1)——URL        

// 直接拨号,拨号完成后会停留在通话记录中

a、方法:

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

[[UIApplication sharedApplication] openURL:url];

b、优点:

–简单
c、缺点:
–不能指定短信内容,而且不能自动回到原应用
1.2发短信(2)——MessageUI框架       
如果自定义短信,需要使用一个框架MessageUI。

优点

a. 从应用出去能回来

b. 可以多人

c. 可以自定义消息,消息支持HTML格式的

 

而且如果在苹果系统中,如果彼此的手机都是iOS设备,并且开通了iMessage功能,彼此之间的短信是走网络通道,而不走运营商的通道!

 

- (void)msg2{// 判断用户设备能否发送短信if (![MFMessageComposeViewController canSendText]) {return;}

// 1. 实例化一个控制器

MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];

// 2. 设置短信内容   
// 1) 收件人
controller.recipients = @[@"10010", @"10086"];
// 2) 短信内容
controller.body = @"给您拜个晚年,祝您晚年快乐!";
// 3) 设置代理
controller.messageComposeDelegate = self;

// 3. 显示短信控制器

[self presentViewController:controller animated:YES completion:nil];
}

 

记得发完短信记得调用代理方法关闭窗口

#pragma mark 短信控制器代理方法
/**
短信发送结果
MessageComposeResultCancelled, 取消
MessageComposeResultSent, 发送
MessageComposeResultFailed 失败
*/
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
NSLog(@"%d", result);
// 在面向对象程序开发中,有一个原则,谁申请,谁释放!
// *** 此方法也可以正常工作,因为系统会将关闭消息发送给self
// [controller dismissViewControllerAnimated:YES completion:nil];
// 应该用这个!!!
[self dismissViewControllerAnimated:YES completion:nil];
}

 

2.发邮件            

- (void)sendmail

{
// 1. 先判断能否发送邮件
if (![MFMailComposeViewController canSendMail]) {
// 提示用户设置邮箱
return;
}
// 2. 实例化邮件控制器,准备发送邮件
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
// 1) 主题 xxx的工作报告
[controller setSubject:@"我的工作报告"];
// 2) 收件人
[controller setToRecipients:@[@"4800607@gmail.com"]];
// 3) cc 抄送
// 4) bcc 密送(偷偷地告诉,打个小报告)
// 5) 正文
[controller setMessageBody:@"这是我的<font color=\"blue\">工作报告</font>,请审阅!<BR />P.S. 我的头像牛X吗?" isHTML:YES];
// 6) 附件
UIImage *image = [UIImage imageNamed:@"头像1.png"];
NSData *imageData = UIImagePNGRepresentation(image);
// 1> 附件的二进制数据
// 2> MIMEType 使用什么应用程序打开附件
// 3> 收件人接收时看到的文件名称
// 可以添加多个附件
[controller addAttachmentData:imageData mimeType:@"image/png" fileName:@"头像.png"];
// 7) 设置代理
[controller setMailComposeDelegate:self];
// 显示控制器
[self presentViewController:controller animated:YES completion:nil];
}

 

同样要记得发完邮件记得调用代理方法关闭窗口

#pragma mark - 邮件代理方法
/**
MFMailComposeResultCancelled, 取消
MFMailComposeResultSaved, 保存邮件
MFMailComposeResultSent, 已经发送
MFMailComposeResultFailed 发送失败
*/
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
// 根据不同状态提示用户
NSLog(@"%d", result);
[self dismissViewControllerAnimated:YES completion:nil];
}

 

3.打电话           

打电话有三种方式可以实现,优缺点也各不同

3.1.打电话不回引用           

- (void)tel1

{
// 直接拨号,拨号完成后会停留在通话记录中
NSURL *url = [NSURL URLWithString:@"tel://10010"];
[[UIApplication sharedApplication] openURL:url];
}

3.2.出去打电话然后回来        

- (void)tel2

{
// 但是:telprompt协议属于苹果的私有协议,一旦程序中使用了此协议,程序无法上架
// 针对越狱的机器开发的系统,可以使用此协议
NSURL *url = [NSURL URLWithString:@"telprompt://10010"];
[[UIApplication sharedApplication] openURL:url];
}

 

3.3借助UIWebView打电话(会回来)  

一般都是用这种,解决了不越狱的问题。

- (void)tel3
{
// 提示:不要将webView添加到self.view,如果添加会遮挡原有的视图
// 懒加载
if (_webView == nil) {
_webView = [[UIWebView alloc] init];
}
NSLog(@"%p", _webView);
// _webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
// [self.view addSubview:_webView];
NSURL *url = [NSURL URLWithString:@"tel://10010"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];
}

 

转载于:https://www.cnblogs.com/spring286/p/3785422.html

你可能感兴趣的文章
2018icpc徐州OnlineA Hard to prepare
查看>>
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
数据库的高级查询
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
Python Web框架Django (零)
查看>>
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
Attribute(特性)与AOP
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>