系统应用和第三方应用跳转

前言:

iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如在应用中拨打电话,一些第三方软件会在应用内发送短信等。今天将和大家一起学习如何使用系统应用、使用系统服务完成上述功能。

事实上,我们在前面学习的内容中就有调用过系统内置的应用。比如我们在点击textView的超链接文本时,默认使用系统浏览器来访问连接,还有前面学习到地图服务,我们也可以通过打开系统内置的地图应用来完成地图服务。在开发某些应用时,如果希望能够调用iOS系统内置的电话、短信、邮件、浏览器应用,此时你可以直接使用UIApplication的OpenURL:方法指定特定的协议来打开不同的系统应用。常用的协议如下:

  • 打电话:tel:或者tel://、telprompt:或telprompt://(拨打电话前有提示)。
  • 发短信:sms:或者sms://
  • 发送邮件:mailto:或者mailto://
  • 启动浏览器:http:或者http://

但是实际开发中我们发现,调用系统内置的应用来完成上述系统服务也存在着一些弊端:除了打电话之外,当你点击了发送短信(或邮件)操作之后直接启动了系统的短信(或邮件)应用程序,我们的应用其实此时已经处于一种挂起状态,打完电话或是发送完短信(或邮件)之后无法自动回到应用界面。而且不能在我们自己开发的应用中制定短信(或邮件)的内容。这显然不符合我们的需求,我们需要在应用程序内部完成这些操作。


1. 拨打电话

拨打电话的功能实现相对简单,直接使用UIApplication的OpenURL:的方法并制定对应的协议就可以,打完电话后我们任然留在当前的应用界面。下面以一个简单的demo演示如何完成拨打电话的功能:

示例代码:

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

// 打电话 tel: 或tel:// 协议
- (IBAction)callPhone1:(id)sender {
    // 使用这个协议会直接拨打电话
    NSString *phoneNumber=@"10010";// 拨打的电话

    NSString *url=[NSString stringWithFormat:@"tel://%@",phoneNumber];

    [self openUrl:url];
}

// 打电话 telprompt:或telprompt:// 协议
- (IBAction)callPhone2:(id)sender {
    // 这个协议在打电话前会先弹出一个对话框,提醒你是否打电话,然后在打完电话之后会回到程序中
    NSString *phoneNumber=@"10010";// 拨打的电话
    NSString *url=[NSString stringWithFormat:@"telprompt://%@",phoneNumber];

    [self openUrl:url];
}

#pragma mark - 私有方法
-(void)openUrl:(NSString *)urlStr {

    // 注意url中包含协议名称,iOS根据协议确定调用哪个应用,例如发送邮件是“tel://”其中“//”可以省略写成“tel:”(其他协议也是如此)
    NSURL *url=[NSURL URLWithString:urlStr];
    UIApplication *application=[UIApplication sharedApplication];
    if(![application canOpenURL:url]){
        NSLog(@"无法打开\"%@\",请确保此应用已经正确安装.",url);
        return;
    }
    // 打开对应协议的应用
    [[UIApplication sharedApplication] openURL:url];
}
@end

2. 发送短信

如果我们在应用中直接调用发送短信的系统应用,在完成发送任务后,我们停留在了系统应用当中,当然我们也可以在程序内部完成短信的编辑和发送任务。利用iOS中的MessageUI.framework,它提供了关于短信的UI接口供开发者在应用程序内部调用。从框架名称不难看出这是一套UI接口,提供有现成的短信的编辑界面,开发人员只需要通过编程的方式给短信控制器设置对应的参数即可。

在MessageUI.framework中用于发送短信的类是MFMessageComposeViewController。它继承于UINavigationController。下面介绍一下MFMessageComposeViewController使用步骤:

  • 创建MFMessageComposeViewController对象。
  • 设置收件人recipients、信息正文body,如果运行商支持主题和附件的话可以设置主题subject、附件attachments(可以通过canSendSubject、canSendAttachments方法判断运行商是否支持)
  • 设置代理messageComposeDelegate,注意这里不是delegate属性,因为delegate属性已经留给UINavigationController,MFMessageComposeViewController没有覆盖此属性而是重新定义了一个代理,实现代理方法获得发送状态。

下面自定义一个发送短信的界面演示MFMessageComposeViewController的使用:我们可以定制短息控制器的相关参数,当我们弹出MFMessageComposeViewController的实例对象时,看到的就是短息的系统编辑界面,点击MFMessageComposeViewController 界面中的“发送”来完成短信发送工作,当然用户也可能点击“取消”按钮回到当前应用。当然,在我们完成发送任务之后还是可以回到当前应用的。

示例代码:

#import "ViewController.h"
#import <MessageUI/MessageUI.h>

@interface ViewController ()<MFMessageComposeViewControllerDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

// 发短信
- (IBAction)snedMessage1:(id)sender {

    NSString *phoneNumber = @"10010";
    NSString *urlString = [NSString stringWithFormat:@"sms://%@",phoneNumber];

    NSURL *url = [NSURL URLWithString:urlString];
    UIApplication *application = [
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值