iOS 打电话、发短信、发邮件功能

打电话

方法1

     最简单最直接的方式:直接跳到拨号界面

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

     [[UIApplication sharedApplication] openURL:url];

     缺点:电话打完后,不会自动回到原应用,直接停留在通话记录界面

方法2

      拨号之前会弹框询问用户是否拨号,拨完后能自动回到原应用

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

      [[UIApplication sharedApplication] openURL:url];

      缺点:因为是私有API,所以可能不会被审核通过

 方法3

      创建一个UIWebView来加载URL,拨完后能自动回到原应用

      if (_webView == nil) {

             _webView = [[UIWebView alloc] initWithFrame:CGRectZero];

       }

       [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"tel://10010"]]];

 

发短信

方法1

      直接跳到发短信界面,但是不能指定短信内容,而且不能自动回到原应用

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

      [[UIApplication sharedApplication] openURL:url];

方法2

      如果想指定短信内容,那就得使用MessageUI框架

      包含主头文件

      #import <MessageUI/MessageUI.h>

      显示发短信的控制器

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

        // 设置短信内容

       vc.body = @"吃饭了没?";

       // 设置收件人列表

       vc.recipients = @[@"10010", @"02010010"];

      // 设置代理

      vc.messageComposeDelegate = self;

      // 显示控制器

      [self presentViewController:vc animated:YES completion:nil];

      代理方法,当短信界面关闭的时候调用,发完后会自动回到原应用

      - (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:@"mailto://10010@qq.com"];

      [[UIApplication sharedApplication] openURL:url];

 

方法2

      跟发短信的第2种方法差不多,只不过控制器类名叫做:MFMailComposeViewController

      假设发送的邮件内容如右图所示,代码实现看备注

      邮件发送后的代理方法回调,发完后会自动回到原应用

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

     {

            // 关闭邮件界面

           [controller dismissViewControllerAnimated:YES completion:nil];

            if (result == MFMailComposeResultCancelled) {

                  NSLog(@"取消发送");  

           } else if (result == MFMailComposeResultSent) { 

                 NSLog(@"已经发出");

           } else {

               NSLog(@"发送失败");

          }

       }

 

 

 

 

posted on 2015-09-22 15:21  sunyaxue  阅读(158)  评论(0编辑  收藏  举报

导航