你的位置:首页 > 操作系统

[操作系统]【原】iOS学习之应用之间的操作


关于应用之间的相互操作,小编一直觉得非常高大上,在一次面试中被面试官一顿暴虐,今天小编就决定学习一下!经过一顿度娘,找到一些博客,不过都比较凌乱,我就打算自己整理一下!

首先要说的是每一个APP都可以设置一个自己独有的URL,APP应用之间的操作就是通过这个URL来实现的!

1、如何配置自己应用的URL?

关于自己的URL,作为资深的程序猿都会想到 Info.plist ,在 Info.plist 中如下图配置:

 

2、APP中判断手机上是否存在另一个APP

核心方法:

[[UIApplication sharedApplication] canOpenURL:url];

该方法的实质就是检测当前你的APP是否可以打开对应URL的APP,如果可以打开说明你手机中装有这个APP,反之打不开就没有这个APP。

这样我们可以通过这个方法先检测后跳转到我们需要跳的应用,例如:我们可以在自己的APP中检测手机上已有的地图导航,有选择的展示和进行跳转。

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) { // 判断是否存在高德地图    // 配置高德地图导航所需要的参数    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];    NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"];    NSString *appUrlScheme = @"Myapp://"; //TODO    NSString *urlString = [NSString stringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=%@&poiname=%@&lat=%f&lon=%f&dev=0&style=2", appName,appUrlScheme, station.name,endCoor.latitude, endCoor.longitude];    NSDictionary *dic = @{@"name": @"使用高德地图导航", @"url": urlString};    [self.availableMaps addObject:dic];  }  if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://map/"]]) { // 判断是否存在百度地图    // 配置百度地图导航所需要的参数    CLLocationCoordinate2D begin = [YDCoordinateConverter transform:startCoor];    NSString *urlString = [NSString stringWithFormat:@"baidumap://map/direction?origin=latlng:%f,%f|name:我的位置&destination=latlng:%f,%f|name:%@&mode=driving&coord_type=gcj02", begin.latitude, begin.longitude, endCoor.latitude, endCoor.longitude, station.name];    NSDictionary *dic = @{@"name": @"使用百度地图导航", @"url": urlString};    [self.availableMaps addObject:dic];  }  if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"qqmap://map/"]]) { // 判断是否存在腾讯地图    // 配置腾讯地图导航所需要的参数    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];    NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"];    NSString *format = @"qqmap://map/routeplan?type=drive&fromcoord=%f, %f&tocoord=%f,%f&coord_type=2&policy=0&refer=%@";    NSString *urlString = [NSString stringWithFormat:format, startCoor.latitude, startCoor.longitude, endCoor.latitude, endCoor.longitude, appName];    NSDictionary *dic = @{@"name": @"使用腾讯地图导航", @"url": urlString};    [self.availableMaps addObject:dic];  }

以上代码是判断对应的地图APP并配置导航所需要的参数,拼接成URL,下面就为大家介绍这个URL如何使用!

 

3、APP之间的跳转及参数传递

核心方法:

[[UIApplication sharedApplication] openURL:url];

 这里的URL就是上述代码中的URL,我针对一个URL进行分析一下

qqmap://map/routeplan?type=drive&fromcoord=%f, %f&tocoord=%f,%f&coord_type=2&policy=0&refer=%@

上面的URL中,qqmap://map/ 为腾讯地图APP的 URL Scheme 

如果在不传参数的情况下,跳转代码如下:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"qqmap://map/"]];

至于qqmap://map/后面的部分为我们要传递的参数,也就是说,我们要传递什么参数就直接将参数拼接到URL上面就可以!

代码如下:(接上面选择地图APP)

NSDictionary *mapDic = self.availableMaps[index];NSString *urlString = mapDic[@"url"];urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlString];[[UIApplication sharedApplication] openURL:url];

 

4、接受参数并处理

在我们跳转到的APP里都应该实现一个方法,通过这个方法对接收到的参数进行处理

核心方法:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{  // 处理接收到的URL  ...  return YES;}

这个方法从URL中分割出对应的参数并进行处理!

 

以上就是小编总结的一些关于应用之间的操作,有什么不足,请及时提出,O(∩_∩)O谢谢!




到日本游费用报价大全日本自助游攻略2015怎样去日本旅游特价日本游深圳到日本旅游报价长隆夜场有什么好玩的?2015广州番禺长隆夜场最新门票价格? 看了这些你还敢吃“毒小吃”吗(全文) 心游吴哥 杭州人镜头里的高棉微笑(组图) 遂昌冬游那晚 银河在头顶缓缓移动 金斗湾怡乐园烧烤多少钱?中山金斗湾怡乐园可以烧烤吗? 中山金斗湾公交线路?金斗湾怡乐园坐车去怎么走? 中山金斗湾怡乐园团购价格?金斗湾怡乐园网上可以预订吗? 金斗湾乐园门票包含哪些项目?中山金斗湾乐园游玩项目介绍? 丰顺漂流团购多少钱?梅州丰顺漂流小孩收费吗? 龙鲸河漂流多长时间一漂?丰顺龙鲸河漂流每天几漂? 广东清远玄真漂流电话?清远玄真漂流网上预订? 广东清远玄真漂流怎么样?清远玄真漂流一日游怎么玩? 大理无量山冬季赏樱花烂漫 泡温泉穿什么_泡温泉穿什么泳衣_泡温泉需要穿泳衣吗 泡温泉注意事项_泡温泉要注意什么 亚航成都至吉隆坡航线2013年7月增至每日一班 MA08-0803T2GC Datasheet MA08-0803T2GC Datasheet MA08-0803YC Datasheet MA08-0803YC Datasheet MA10-1104BC Datasheet MA10-1104BC Datasheet 玉龙雪山海拔多少 玉龙雪山海拔多少 玉龙雪山海拔多少 刘公岛在哪 刘公岛在哪 刘公岛在哪 天津意式风情街地址 天津意式风情街地址 天津意式风情街地址