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

使用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. 可以传递字符串的参数

 

时间: 2024-09-16 20:50:46

使用openURL实现程序间带参数跳转详解的相关文章

Java程序调用带参数的shell脚本返回值

Java程序调用带参数的shell脚本返回值 首先来看看linux中shell变量($#,$@,$0,$1,$2)的含义解释 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表.如"$*"用「"」括起来的情况.以"$1 $2 - $n"的形式输出所有参数. $@ 所有参数列表.如"

MySQL my.cnf参数配置优化详解

MySQL my.cnf参数配置优化详解 本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS 5.6 64位系统,MySQL 5.5.x 稳定版.适用于日IP 50-100w,PV 100-300w的站点,主要使用InnoDB存储引擎.其他应用环境请根据实际情况来设置优化. 注:你的MySQL 版本可能和这里用的不同,所以有些参数会废弃,有些被替代,当发现启动异常或者使用异常时,请取消某些配置. # 客户端 # 以下选项会被MySQL客户端应用读取.注意只有M

CSS中HTML元素定位Position参数可选值详解

position 属性规定元素的定位类型.这个属性定义建立元素布局所用的定位机制.任何元素都可以定位,不过绝对或固定元素会生成一个块级框,而不论该元素本身是什么类型.相对定位元素会相对于它在正常流中的默认位置偏移. 默认值: static 语法: position : static | absolute | fixed | relative 继承性: no 版本: CSS2 JavaScript 语法: object.style.position="absolute" static 元

ASP程序与SQL存储过程结合使用详解

定义总是很抽象.存储进程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL SERVER).如果我们通过创建存储进程以及在ASP中调用存储进程,就可以避免将SQL语句同ASP代码混杂在一起.这样做的好处至少有三个:    第一.大大提高效率.存储进程本身的执行速度非常快,而且,调用存储进程可以大大减少同数据库的交互次数.    第二.提高安全性.假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密.    第三.有利于SQL语句的重用

ASP程序与SQL存储过程结合使用详解_存储过程

定义总是很抽象.存储进程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL SERVER).如果我们通过创建存储进程以及在ASP中调用存储进程,就可以避免将SQL语句同ASP代码混杂在一起.这样做的好处至少有三个:    第一.大大提高效率.存储进程本身的执行速度非常快,而且,调用存储进程可以大大减少同数据库的交互次数.    第二.提高安全性.假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密.    第三.有利于SQL语句的重用

MySQL 5.5.x my.cnf参数配置优化详解_Mysql

一直有耳闻MySQL5.5的性能非常NB,所以近期打算测试一下,方便的时候就把bbs.kaoyan.com升级到这个版本的数据库.今天正好看到一篇有关my.cnf优化的总结,虽然还没经过我自己的实践检验,但从文章内容来说已经写的很详细了(当然,事实上下面这篇文章很多地方只是翻译了my.cnf原始配置文件的说明,呵呵),所以特地转载收藏一下,大家在对mysql服务器进行优化的时候可以作为参考,并根据实际情况对其中的一些参数进行调整.(特别备注:以下原文中有些参数事实上不适用于mysql5.5,不知

linux kill命令参数及用法详解

  Linux kill 命令使用详解 功能说明:删除执行中的程序或工作. 语 法:kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>] 补充说明:kill可将指定的信息送至程序.预设的信息为SIGTERM(15),可将指定程序终止.若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序.程序或工作的编号可利用ps指令或jobs指令查看. 参 数: -l <信息编号> 若不加<信息编号>选项,则-l参数会列出全部的

python自带的http模块详解_python

挺久没写博客了,因为博主开始了今年另一段美好的实习经历,学习加做项目,时间已排满:很感谢今年这两段经历,让我接触了golang和python,学习不同语言,可以跳出之前学习c/c++思维的限制,学习golang和python的优秀特性以及了解在不同的场景,适用不同的语言:而之前学习linux和c/c++,也使我很快就上手golang和python; 我学习的习惯,除了学习如何使用,还喜欢研究源码,学习运行机制,这样用起来才会得心应手或者说,使用这些语言或框架,就和平时吃饭睡觉一样,非常自然:因为

php配置php-fpm启动参数及配置详解_php技巧

约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini一,php-fpm的启动参数 复制代码 代码如下: #测试php-fpm配置/usr/local/php/sbin/php-fpm -t/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.con