#1.发短信
实现打电话的功能,主要二种方法,下面我就分别说说它们的优缺点。web
##1.1.发短信(1)——URL
// 直接拨号,拨号完成后会停留在通话记录中网络
###一、方法:
NSURL *url = [NSURL URLWithString:@”sms://10010″];框架
[[UIApplication sharedApplication] openURL:url];url
###二、优势:
–简单spa
###三、缺点:
–不能指定短信内容,并且不能自动回到原应用代理
##1.2发短信(2)——MessageUI框架
若是自定义短信,须要使用一个框架MessageUI。code
###优势orm
从应用出去能回来对象
能够多人ip
能够自定义消息,消息支持HTML格式的
并且若是在苹果系统中,若是彼此的手机都是iOS设备,而且开通了iMessage功能,彼此之间的短信
是走网络通道,而不走运营商的通道!
{
// 判断用户设备可否发送短信
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];
}
记得发完短信调用代理方法关闭窗口
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#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];
}
一样记得发完邮件调用代理方法关闭窗口
3 4 5 6 7 8 9 10 11 12 13 14 15 |
#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.打电话不回引用
1 2 3 4 5 6 7 8 |
1 - (void)tel1 2 { 3 // 直接拨号,拨号完成后会停留在通话记录中 4 NSURL *url = [NSURL URLWithString:@"tel://10010"]; 5 6 [[UIApplication sharedApplication] openURL:url]; 7 }
|
##3.2.出去打电话而后回来
1 2 3 4 5 6 7 8 9 |
- (void)tel2 { // 可是:telprompt协议属于苹果的私有协议,一旦程序中使用了此协议,程序没法上架 // 针对越狱的机器开发的系统,可使用此协议 NSURL *url = [NSURL URLWithString:@"telprompt://10010"];
[[UIApplication sharedApplication] openURL:url]; }
|
##3.3借助UIWebView打电话(会回来)
通常都是用这种,解决了不越狱的问题。
Objective-C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
- (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]; } |