使用openURL实现程序间带参数跳转详解
来源:互联网 发布:上海培训java 编辑:程序博客网 时间:2024/06/07 00:10
实现的效果:有两款应用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. 可以传递字符串的参数
实现的效果:有两款应用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. 可以传递字符串的参数
- 使用openURL实现程序间带参数跳转详解
- 使用openURL实现程序间带参数跳转详解
- 使用openURL实现程序间带参数跳转详解
- 小程序跳转带参数
- react使用hashHistory实现类似get方法带参数跳转
- openURL程序间通讯
- IIS上设置301跳转,实现带参数跳转
- react-router带参数使用Link跳转并取出参数
- 小程序跳转、请求、带参数请求小例子
- struts带参数跳转
- action 带参数跳转
- Struts2 带参数跳转
- Intent带参数跳转
- controller 带参数跳转
- react---带参数跳转
- iOS --- 通过openURL实现APP之间跳转并传递数据
- 页面跳转,特别是struts.xml中result带参数实现
- javaEE--request.getRequestDispatcher--URL后带参数实现自定义跳转
- JS高级程序设计-笔记
- mysql如何实现插入数据时如果不存在则插入如果存在则更新的操作
- 常用的工具网站和收藏文章
- 黑马程序员--#import和@class的区别
- h.264编码库x264实例
- 使用openURL实现程序间带参数跳转详解
- android动态加载jar包
- Android Studio的奇技淫巧
- hdu 5441 Travel(离线操作+并查集路径压缩)
- Linux驱动之阻塞与非阻塞
- protobuf简介
- qt5.2+ opencv2.4.10 + cmake 编译配置过程
- Java应用中使用ShutdownHook友好地清理现场
- 使用commonfileUpload上传文件遇到后台中文乱码