博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用openURL实现程序间带参数跳转详解
阅读量:6566 次
发布时间:2019-06-24

本文共 2117 字,大约阅读时间需要 7 分钟。

使用openURL实现程序间带参数跳转详解

实现的效果:有两款应用A与B,A打开B

A --> B

1. 新建工程B,bundle ID为com.YouXianMing.B

建立一个URL

这么填写(与前面bundle ID类似的写法):

2. 新建工程A,bundle ID随便起,为简单起见,写下如下代码

NSURL *url = [NSURL URLWithString:@"B://com.YouXianMing"];    if ([[UIApplication sharedApplication] canOpenURL:url])    {        NSLog(@"跳转并打开");        [[UIApplication sharedApplication] openURL:url];    }    else    {        NSLog(@"打开失败");    }

先执行B(安装应用B),在执行应用A,你会发现可以正常从A应用跳转到B应用了.

很简单吧!

 

我们再来实现可以传递参数的

实现的效果:有两款应用A与B,A打开B,并传递一些参数

    参数

A -----> B

1. A中代码这么写

// 其他应用的 URL Schemes --> B    // 其他应用的 Identifier  --> com.YouXianMing    // values?              --> 要传递的参数,方便解析    NSURL *url = [NSURL URLWithString:\                  @"B://com.YouXianMing/values?username=WT&password=123456&callback=invoking"];    if ([[UIApplication sharedApplication] canOpenURL:url])    {        NSLog(@"跳转并打开");        [[UIApplication sharedApplication] openURL:url];    }    else    {        NSLog(@"打开失败");    }

2. 在B应用中请添加如下方法到AppDelegate.m中

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{    if ([[url scheme] isEqualToString:@"B"])    {        if ([[url host] isEqualToString:@"com.YouXianMing"])        {            /*             query用法                          The query string from the URL.              If the receiver does not conform to RFC 1808, returns nil. For example,              in the URL http://www.example.com/index.php?key1=value1&key2=value2,              the query string is key1=value1&key2=value2.             */            NSString *query = [url query];            // 分割&            NSArray *array = [query componentsSeparatedByString:@"&"];                    // 显示数据            NSLog(@"%@", array);        }                return YES;    }        return NO;}

3. 执行A程序后,注意观察B程序的打印信息:

2014-04-21 13:06:00.277 B[1683:60b] (

    "username=WT",
    "password=123456",
    "callback=invoking"
)

 

实现的效果:有两款应用A与B,A打开B并传参数,B打开A并传参数

太简单了,略.

 

小结:

1. 如果A应用想被B应用打开,需要在A应用中设置URL,在设置中需要设置URL identifier 以及 URL Schemes,作为这个应用的标示

2. A既要打开B,B也能够打开A,那就需要AB两款应用都设置URL了

3. 可以传递字符串的参数

 

转载地址:http://znjjo.baihongyu.com/

你可能感兴趣的文章
亚马逊推出 Blox,用于 EC2 容器服务的开源工具集合
查看>>
Linux:在中国没有真正的新闻
查看>>
iOS推送功能极光推送的介绍与实现
查看>>
单用户模式与grub加密
查看>>
Chromium Graphics: 3D上下文及其虚拟化 - Part I
查看>>
jquery javascript获得网页的高度和宽度
查看>>
2019 -2-15 复习
查看>>
vim锁定屏幕
查看>>
实用的 JavaScript 调试小技巧
查看>>
027移除元素
查看>>
Linux下清理内存和Cache方法
查看>>
CodeVS 1018 单词接龙(DFS)
查看>>
我的博客园的CSS和html设置
查看>>
工作中简单的kettle使用
查看>>
spark shuffle:分区原理及相关的疑问
查看>>
C#匿名委托
查看>>
Laravel5.5 使用第三方Vendor添加注册验证码
查看>>
06- Linux下sublime下载与使用
查看>>
前端文摘:Web 开发模式演变历史和趋势
查看>>
将图片序列转化为视频文件
查看>>