【原】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谢谢!
【原】iOS学习之应用之间的操作的更多相关文章
- iOS学习之应用之间的操作(转发)
首先要说的是每一个APP都可以设置一个自己独有的URL,APP应用之间的操作就是通过这个URL来实现的! 1.如何配置自己应用的URL? 关于自己的URL,作为资深的程序猿都会想到 Info.plis ...
- iOS学习之页面之间传值的方式总结
传值三种场景: 1.属性传值(从前往后传) 需求:第二个界面标签显示第一个界面输入框文字. 第一步, 在前一个界面定义属性. (语义属性声明为copy); 第二步, 在进入下一个界面之前,给属性传入数 ...
- 【原】iOS学习之SQLite和CoreData数据库的比较
1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...
- 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536
原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45) 阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...
- 【原】iOS学习47之第三方-FMDB
将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...
- IOS学习之IOS沙盒(sandbox)机制和文件操作
IOS学习之IOS沙盒(sandbox)机制和文件操作(一) 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都 ...
- IOS开发-UI学习-sqlite数据库的操作
IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...
- iOS学习之UITableView中Cell的操作
接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...
随机推荐
- jsp 头像上传显示部分代码实现
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> <% ...
- 搭建consul 集群
1. 准备工作 a) 启动三台虚拟机 s1:10.1.7.141 s2:10.1.7.139 s3:10.1.7.138 b) 每台机器上在 /home新建文件夹 mkdir ...
- CI加载model的问题
1.需求 CI在linux上无法加载model 2.原因 因为linux区分大小写,且model文件名首字符要大写. As said in the comments : Your model's fi ...
- JS函数运行在它们被定义的作用域内,而不是它们被执行的作用域内
一个函数的作用域并不会因为被另一个函数调用而拓展,取得另一个函数的作用域: function show(name){ alert(name) } function show2(){ var name= ...
- IIS网站或系统验证码不显示问题——"使用了托管的处理程序,但是未安装或未完整安装 ASP.NET"
在IIS上发布了一个系统,但是登陆页面的验证码图片一直出不来,尝试了各种办法,权限.路径.继承父类路径等都不管用,进入Login.html,对着无验证码图片的图标,右键复制图片的网址,粘贴到地址栏,出 ...
- docker 目录迁移
(ubuntu 12.04) 默认路径 /var/lib/docker --> /data/docker root@node1:~# service docker stop root@node ...
- 配置VMware虚拟机用绕过校园网达到无线上网配置方法
因为平时要用到Vmware这样的工具上虚拟机上网, 但是本人是学生狗,学生狗在学校就要面对大学毒瘤软件--锐捷,而锐捷是不允许有虚拟网卡的存在的,所以上网只能用wifi上.之前试了很久,反正是怎么开都 ...
- RecyclerView解密篇(一)
一.前言 RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视 ...
- asp.net 读取导入的project(mpp)文件
公司项目有用到读取project文件(.mpp)并保存到指定数据库类似的功能. 查了一下大家总结的方法. 找到一哥们代码,初步判断可行,特此收藏. using System.IO; using Mic ...
- pycharm上安装使用easygui
运行下面两句后,显示错误 import easygui easygui.msgbox("Hello There!") 错误: Traceback (most recent call ...