电话、短信是手机的基础功能,iOS中提供了接口,让我们调用。这篇文章简单的介绍一下iOS的打电话、发短信在程序中怎么调用。

1、打电话

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10010"]];//打电话

使用openURL这个API打电话结束后,返回的是系统的拨打电话界面,如何才能返回自己的应用呢?有两种方法与大家分享。

第一种是用UIWebView加载电话,这种是合法的,可以上App Store的。

代码如下:

    UIWebView*callWebview =[[UIWebView alloc] init];
NSURL *telURL =[NSURL URLWithString:@"tel:10010"];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
//记得添加到view上
[self.view addSubview:callWebview];

第二种是私有方法,不能上App Store的(自己没试过)。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://10010"]];

上面的代码只是把第一个方法中的tel为telprompt.

1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示
NSMutableString *
str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"186xxxx6979"];
    //           
NSLog(@"str======%@",str);
[[UIApplication
sharedApplication] openURL:[NSURL URLWithString:str]];
    
2,这种方法,打完电话后还会回到原来的程序,也会弹出提示,推荐这种
NSMutableString *
str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"186xxxx6979"];
    UIWebView *
callWebview = [[UIWebView alloc] init];
    [callWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]]];
    [self.view addSubview:callWebview];
    [callWebview release];
    [str release];

3,这种方法也会回去到原来的程序里(注意这里的telprompt),也会弹出提示
NSMutableString *
str=[[NSMutableString alloc] initWithFormat:@"telprompt://%@",@"186xxxx6979"];
    //           
NSLog(@"str======%@",str);
 
  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]]

电话、短信是手机的基础功能,iOS中提供了接口,让我们调用。这篇文章简单的介绍一下iOS的打电话、发短信在程序中怎么调用。

2、发短信

iOS中可以使用两种方式发送短信,最简单是使用openURL:

  1. [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms://10010"]];//发短信

上面方式无法指定短信内容,iOS4.0新加入了MFMessageComposeViewController和MFMessageComposeViewControllerDelegate,提供了发送短信的接口,可以像发送邮件那样不用跳出程序来发送短信. 介绍可参阅Message UIFramework Reference

MFMessageComposeViewController提供了操作界面使用前必须检查canSendText方法,若返回NO则不应将这个controller展现出来,而应该提示用户不支持发送短信功能.

messageComposeDelegate :代理,处理发送结果

recipients  :收信人<列表,支持群发>

body :短信内容

Frameworks中要引入MessageUI.framework

#import <MessageUI/MessageUI.h>
添加协议:<MFMessageComposeViewControllerDelegate>

  1. #import <MessageUI/MessageUI.h>
  2. @interface DemoViewController : UIViewController <MFMessageComposeViewControllerDelegate>
  3. @end

调用MFMessageComposeViewController,同时实现协议MFMessageComposeViewControllerDelegate。

  1. - (void)showMessageView
  2. {
  3. if( [MFMessageComposeViewController canSendText] ){
  4. MFMessageComposeViewController * controller = [[MFMessageComposeViewController alloc]init]; //autorelease];
  5. controller.recipients = [NSArray arrayWithObject:@"10010"];
  6. controller.body = @"测试发短信";
  7. controller.messageComposeDelegate = self;
  8. [self presentModalViewController:controller animated:YES];
  9. [[[[controller viewControllers] lastObject] navigationItem] setTitle:@"测试短信"];//修改短信界面标题
  10. }else{
  11. [self alertWithTitle:@"提示信息" msg:@"设备没有短信功能"];
  12. }
  13. }
  14. //MFMessageComposeViewControllerDelegate
  15. - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
  16. [controller dismissModalViewControllerAnimated:NO];//关键的一句   不能为YES
  17. switch ( result ) {
  18. case MessageComposeResultCancelled:
  19. [self alertWithTitle:@"提示信息" msg:@"发送取消"];
  20. break;
  21. case MessageComposeResultFailed:// send failed
  22. [self alertWithTitle:@"提示信息" msg:@"发送成功"];
  23. break;
  24. case MessageComposeResultSent:
  25. [self alertWithTitle:@"提示信息" msg:@"发送失败"];
  26. break;
  27. default:
  28. break;
  29. }
  30. }
  31. - (void) alertWithTitle:(NSString *)title msg:(NSString *)msg {
  32. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
  33. message:msg
  34. delegate:self
  35. cancelButtonTitle:nil
  36. otherButtonTitles:@"确定", nil];
  37. [alert show];
  38. }

参考:

http://developer.apple.com/library/ios/#documentation/MessageUI/Reference/MFMessageComposeViewController_class/Reference/Reference.html

最新文章

  1. C++读写文件ofstream,ifstream,fstream)[转]
  2. java.lang.UnsatisfiedLinkError: C:\apache-tomcat-8.0.21\bin\tcnative-1.dll: Can&#39;t load IA 32-bit .dll on a AMD 64-bit platform
  3. SubmitText 中配置lua 运行环境
  4. 让 Putty 保存密码,自动登陆的四种方法
  5. TreeView节点
  6. Fedora下YouCompleteMe配置
  7. 用python3实现linux的sed功能
  8. vue指令v-on示例解析
  9. AngularJS进阶(二十九)AngularJS项目开发技巧之localStorage存储
  10. canvas学习笔记之2d画布基础的实现
  11. 项目(四)DHCP服务配置
  12. solr7.7.0搜索引擎使用(四)(搜索语法)
  13. OpenCV 学习笔记 04 深度估计与分割
  14. 安装Centos7 随手记
  15. Github如何撤销提交并清除痕迹
  16. List集合去重的一些方法(常规遍历、Set去重、java8 stream去重、重写equals和hashCode方法)
  17. Spark 介绍(基于内存计算的大数据并行计算框架)
  18. python os模块常用命令
  19. 一)如何开始 ehcache ?
  20. 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别

热门文章

  1. maven解决.lastUpdated maven无法下载jar
  2. nodejs template
  3. Unity3d webplayer发布的问题和100%自适应浏览器
  4. cf D. On Sum of Fractions
  5. 往github上传demo
  6. SendMessage和PostMessage区别以及WPARAM 和 LPARAM区别
  7. max Sum(简单动态规划)
  8. 《A First Course in Probability》-chaper1-组合分析-方程整数解的个数
  9. selenium grid 测试资料
  10. Java 单元测试Junit