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

首先要说的是每一个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谢谢!

【原】iOS学习之应用之间的操作的更多相关文章

  1. iOS学习之应用之间的操作(转发)

    首先要说的是每一个APP都可以设置一个自己独有的URL,APP应用之间的操作就是通过这个URL来实现的! 1.如何配置自己应用的URL? 关于自己的URL,作为资深的程序猿都会想到 Info.plis ...

  2. iOS学习之页面之间传值的方式总结

    传值三种场景: 1.属性传值(从前往后传) 需求:第二个界面标签显示第一个界面输入框文字. 第一步, 在前一个界面定义属性. (语义属性声明为copy); 第二步, 在进入下一个界面之前,给属性传入数 ...

  3. 【原】iOS学习之SQLite和CoreData数据库的比较

    1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...

  4. 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536

    原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45)   阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...

  5. 【原】iOS学习47之第三方-FMDB

    将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...

  6. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  7. IOS学习之IOS沙盒(sandbox)机制和文件操作

    IOS学习之IOS沙盒(sandbox)机制和文件操作(一) 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都 ...

  8. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

  9. iOS学习之UITableView中Cell的操作

    接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...

随机推荐

  1. php 全局变量

    参考链接:http://www.cnblogs.com/borage/p/3645285.html

  2. git clone出现的error: The requested URL returned error: 401 Unauthorized

    error: The requested URL returned error: 401 Unauthorized while accessing https://git.oschina.net/.. ...

  3. java基础 super 子类调用父类

    如果希望在子类中,去调用父类的构造方法,要求在子类的构造函数调用 example如下: package test; /* * 如果希望在子类中,去调用父类的构造方法,要求在子类的构造函数调用 * */ ...

  4. css中margin的应用

    1.margin用于设置外边距,没有继承性,父元素设置的margin属性子元素不会继承. 2.margin存在重叠的问题. 水平边距永远不会发生重叠. 垂直边距在特定情况下会重叠. 重叠问题都很容易解 ...

  5. word20161224

    V.34 V.90 validation / 验证 value entry / 值项 variable / 变量 variable bit rate, VBR / 可变传输率 VBR, variabl ...

  6. linux Mint 安装tomcat8

    先安装jdk,由于我这以安装jdk这里就不做详细描述: 到官网下载和自己jdk对应版本的tomcat包(tomcat.apache.org) 解压tomcat包到/opt/tomcat8下 tar - ...

  7. 海量日志分析方案--logstash+kibnana+kafka

    下图为唯品会在qcon上面公开的日志处理平台架构图.听后觉得有些意思,好像也可以很容易的copy一个,就动手尝试了一下. 目前只对flume===>kafka===>elacsticSea ...

  8. VC++ : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>

    最近学习Google Breakpad,将其用在了自己的项目中,编译的版本为VS2010,没有什么问题.但是为了和之前的程序兼容,需要使用VS2008版本的程序,于是又编译了VS2008版本的代码,但 ...

  9. TFS API:二、TFS 代码查询工作项

    TFS API:二.TFS  代码查询工作项 首先我们需要认识TFS的两大获取服务对象的类. 他们分别为TfsConfigurationServer和TfsTeamProjectCollection, ...

  10. C#并行

         /// <summary>         ///该实现方式并不是最高效的         ///只是举个例子,说明用锁来保护共享状态         /// </summ ...