今天把APP里常用小功能 例如发短信、发邮件、打电话。
全部拿出来简单说说它们的实现思路。
 
1.发短信
实现打电话的功能,主要二种方法,下面我就分别说说它们的优缺点。
1.1.发短信(1)——URL 
// 直接拨号,拨号完成后会停留在通话记录中
1、方法:

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

2、优点:
–简单
3、缺点:
–不能指定短信内容,而且不能自动回到原应用
1.2发短信(2)——MessageUI框架 

如果自定义短信,需要使用一个框架MessageUI。

优点
 1. 从应用出去能回来
 2. 可以多人
 3. 可以自定义消息,消息支持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];
}

1、调用 自带mail

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://admin@hzlzh.com"]];

2、调用 电话phone

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8008808888"]];

3、调用 SMS

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];

4、调用自带 浏览器 safari

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.hzlzh.com"]];

调用phone可以传递号码,调用SMS 只能设定号码,不能初始化SMS内容。

若需要传递内容可以做如下操作:

加入:MessageUI.framework

#import <MessageUI/MFMessageComposeViewController.h>

实现代理:MFMessageComposeViewControllerDelegate

调用sendSMS函数

//内容,收件人列表

- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients

{

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

if([MFMessageComposeViewController canSendText])

{

controller.body = bodyOfMessage;

controller.recipients = recipients;

controller.messageComposeDelegate = self;

[self presentModalViewController:controller animated:YES];

}

}

// 处理发送完的响应结果
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
  [self dismissModalViewControllerAnimated:YES];
 
  if (result == MessageComposeResultCancelled)
    NSLog(@"Message cancelled")
  else if (result == MessageComposeResultSent)
    NSLog(@"Message sent")  
  else 
    NSLog(@"Message failed")  
}

发送邮件的为:

导入#import <MessageUI/MFMailComposeViewController.h>

实现代理:MFMailComposeViewControllerDelegate

//发送邮件

-(void)sendMail:(NSString *)subject content:(NSString *)content{

MFMailComposeViewController *controller = [[[MFMailComposeViewController alloc] init] autorelease];

if([MFMailComposeViewController canSendMail])

{

[controller setSubject:subject];

[controller setMessageBody:content isHTML:NO];

controller.mailComposeDelegate = self;

[self presentModalViewController:controller animated:YES];

}

}

//邮件完成处理

-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{

[self dismissModalViewControllerAnimated:YES];

if (result == MessageComposeResultCancelled)

NSLog(@"Message cancelled");

else if (result == MessageComposeResultSent)

NSLog(@"Message sent");

else

NSLog(@"Message failed");

}

默认发送短信的界面为英文的,解决办法为:

在.xib 中的Localization添加一組chinese就ok了

IOS,发短信,发邮件,打电话的更多相关文章

  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. iOS 打电话、发短信、邮件、打开网址、调用应用等合集

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

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

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

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

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

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

  9. iOS中多种方式实现打电话、发短信、写邮件

    一.打电话 打电话--方法1 NSURL *URL = [NSURL URLWithString:@"tel://10010"]; [[UIApplication sharedAp ...

随机推荐

  1. 死锁相关 变量 与 PURGE 线程停止

    http://www.tuicool.com/articles/NzAFZn https://github.com/percona/percona-server/pull/83/commits/091 ...

  2. 如何恢复 Linux 上删除的文件,第 1 部分

    来源:http://www.ibm.com/developerworks/cn/linux/l-cn-filesrc/ 原理及普通文件的恢复 要想恢复误删除的文件,必须清楚数据在磁盘上究竟是如何存储的 ...

  3. Golang学习 - path/filepath 包

    ------------------------------------------------------------ filepath 中的函数会根据不同平台做不同的处理,比如路径分隔符.卷名等. ...

  4. Linux Shell远程执行命令(命令行与脚本方式)

    需求:经常需要在一台服务器远程到其他节点的服务器上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,因此能有个集中管理的方式就好了.介绍两种shell命令远程执行的方法. 方式一: s ...

  5. sed命令用法详解

    sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space) ...

  6. PostgreSQL异步客户端(并模拟redis 数据结构)

    以前为了不在游戏逻辑(对象属性)变更时修改数据库,就弄了个varchar字段来表示json,由服务器逻辑(读取到内存)去操作它. 但这对运维相当不友好,也不能做一些此Json数据里查询. 所以后面就用 ...

  7. UIScrollView做循环图片

    #import "ViewController.h" #define IMAGE_COUNT 6 @interface ViewController () { UIImageVie ...

  8. Oracle基础 (十一)字符串函数

    一.字符串函数 LENGTH(char1,char2) SELECT LENGTH('abc def gh') FROM dual; --获取字符串的长度,包含空格 结果: CONCAT(char1, ...

  9. React Native学习-控制横竖屏第三方组件:react-native-orientation

    在项目中,有时候可能会想使不同的页面显示的横竖屏也不一样,比如前一段我做的<广播体操>的项目,在首页面,肯定是想使页面为竖屏显示,但是播放页面要为横屏显示,即使用户的手机可以转屏,我们的播 ...

  10. POJ 3660 Cow Contest (闭包传递)

    Cow Contest Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7690   Accepted: 4288 Descr ...