zoukankan      html  css  js  c++  java
  • IOS,发短信,发邮件,打电话

    今天把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 allocinitautorelease];

     

        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 allocinitautorelease];

     

        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了

  • 相关阅读:
    使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效
    VB.NET 笔记1
    知识管理系统Data Solution研发日记之一 场景设计与需求列出
    知识管理系统Data Solution研发日记之五 网页下载,转换,导入
    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了
    分享制作精良的知识管理系统 博客园博客备份程序 Site Rebuild
    知识管理系统Data Solution研发日记之四 片段式数据解决方案
    知识管理系统Data Solution研发日记之二 应用程序系列
    知识管理系统Data Solution研发日记之七 源代码与解决方案
    知识管理系统Data Solution研发日记之三 文档解决方案
  • 原文地址:https://www.cnblogs.com/OIMM/p/4785577.html
Copyright © 2011-2022 走看看