iOS中如何切换到发短信、打电话、发邮件

时间:2022-11-10 07:29:56

     我们在做APP的时候,难免会遇到需要调用短信,电话等程序的时候.如美团.

     当然,这些都只是一些简单的方法就可以实现,但是时间久了也会淡忘,所以想写这边博客.一是为了再捡起来复习一下,另一个相当于留个备份,以后忘了,自己也可以捡起来看看.

     

     首先,说说如何调用浏览器打开网页.

    当然这个就很简单了,只需要短短两句话就可以实现

 

     NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

//    

     [[UIApplication sharedApplication] openURL:url];

 

   发邮件

  在我们书写这个之前,必须先导入MessageUI.framework库.并且引入两个头文件

并且引入头文件

#import <MessageUI/MFMailComposeViewController.h>

签订协议

MFMailComposeViewControllerDelegate

实际代码如下

Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));

    if (mailClass == nil) {   // 首先判断是否支持

        

        NSLog(@"设备不支持邮件发送功能");

    }

    

    //苹果系统提供了写邮件界面的接口,MFMailComposeViewController是用来显示界面的

    //判断用户是否设置邮件账户

    

    

    if (![MFMailComposeViewController canSendMail]) {

        NSLog(@"该用户没有设置邮箱账户");

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"发送结果" message:@"该用户没有设置邮箱账户" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

        [alertView show];

        return;

}

   //MFMailComposeViewController 继承于 UINavigationController

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

    

 

    //邮件主题

    [controller setSubject:@"我的硬件调研"];

    

    //发送邮件给.....

    [controller setToRecipients:@[@"910809513@qq.com"]];

    //抄送:比如邮件要发给技术部,同时想发给保卫部、财务部,你就在抄送地址里填上保卫部、财务部他们就会一起收到。叫抄送

    

    //密送:比如邮件要发给技术部,但你同时想给总经理也发一封,但不想让技术部知道,你就在暗送地址填上总经理,他就会收到而技术部不会知道

    

    //举个例子

//    如果:A 发送邮件给B1、B2、B3,抄送给C1、C2、C3,密送给D1、D2、D3。

//    那么:

//    A知道自己发送邮件给了B1、B2、B3,并且抄送给了C1、C2、C3,密送给了D1、D2、D3。

//    B1知道这封是A发送给B1、B2、B3的邮件,并且抄送给了C1、C2、C3,但不知道密送给了D1、D2、D3。

//    C1知道这封是A发送给B1、B2、B3的邮件,并且抄送给了C1、C2、C3,但不知道密送给了D1、D2、D3。

//    D1知道这封是A发送给B1、B2、B3的邮件,并且抄送给了C1、C2、C3,而且密送给了自己,但不知道密送给了D2、D3。

    //抄送

    [controller setCcRecipients:@[@"13086069062@qq.com"]];

    //密送

    [controller setBccRecipients:@[@"877083696@qq.com"]];

    

    //邮件的主要内容

    [controller setMessageBody:@"编辑" isHTML:YES];

    

    controller.mailComposeDelegate = self;

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

邮件发送的代理方法

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

{

    NSString *str = nil;

    if (result == MFMailComposeResultFailed) {

        

        str = @"发送失败";

    }else if (result == MFMailComposeResultCancelled){

        

        str = @"发送取消";

    }else if (result == MFMailComposeResultSent)

    {

        str = @"发送成功";

    }else

    {

        str = @"发送保存";

    }

    

    [self dismissViewControllerAnimated:YES completion:nil];

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"发送结果" message:str delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

    [alertView show];

 

}

 

发短信

 

 //1.引入MessageUI框架

    //2.导入MessageUI/MFMessageComposeViewController.h头文件

    //3.签协议MFMessageComposeViewControllerDelegate

    //4.判断用户设备能否发送短信 如果不能,就返回 如果能,就实例化一个短信编辑控制器

    //5.签订代理

    //6.模态到短信编辑控制器视图,编辑短信,发送

    //7.用代理方法监听发送,如果发送完成就回收编辑控制器视图,提示发送结果

    

    //功能:

    //1. 发完信息后能回引

    //2. 可以一次多人发送

    //3.消息可以自定义 支持html格式

    

    //手机上信息设置中打开iMessage功能,对方也是iphone手机,信息不走运营商通道,而是网络通道

 

代码如下:

  

 //判断用户设备能否发送信息 不能就返回

    if (![MFMessageComposeViewController canSendText]) {

        

          

        return;

    }

    //实例化一个控制器

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

    //设置短信内容

    //收件人

    //messageController.recipients = @[@"1800000000"];

    //短信内容

    //messageController.body = @"叫你一声二大爷,可否";

    

    messageController.messageComposeDelegate = self;

    

    //模态出编辑短信控制器

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

 接着是代理.

//在发送完成后调用代理方法关闭窗口

-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result

{

 

    NSString *str = @"result";

    //发送的三种结果 成功 失败 取消

    if (result == MessageComposeResultSent) {

     str = @"发送成功";

       

    }else if (result == MessageComposeResultFailed)

    {

      str = @"发送失败";

    }else

    {

       str = @"发送已取消";

    }

    //将控制器模态回去

    [self dismissViewControllerAnimated:YES completion:nil];

    //提示发送结果

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"发送结果" message:str delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

    [alertView show];

    

    

}

 

打电话

 打电话有以下三种方式

//1.打完电话不回引用  就是会停留在通话记录中,不回回到你的应用中

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

//    

//    [[UIApplication sharedApplication] openURL:url];

//    NSLog(@"打了");

    

    //2.用telprompt协议, 能回引用,挂了电话后会回到你的应用中,但是这个协议属于苹果的私有协议,如果在程序中使用了该协议,应用是没办法上线的,针对越狱的机器的开发系统,可以引用此协议

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

//    [[UIApplication sharedApplication] openURL:url];

    

    //3.用webView 能回引用,并且是合法的,推荐使用

    //self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

    //懒加载 也称延迟加载, 既在需要的时候才去加载(重写get方法),(占内存小)

    //懒加载的作用

    if (self.webView == nil) {

        self.webView = [[UIWebView alloc] init];

    }

    NSLog(@"%p", self.webView);

    

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

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [self.webView loadRequest:request];

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示信息" message:@"通话结束" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

    [alertView show];