程序间唤醒
程序间的唤醒与通讯
两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的。其中的url参数就是被唤醒的程序的URL Schemes,默认项目的URL Schemes为空的,因此想让项目能被其它项目唤醒,得先设置项目的URL Schemes,具体步骤如下:
1.打开项目的info.plist:
2.设置info.plist:
在information Property List下添加一个key为URL type栏,并且在URL type下的item0下添加一个key为URL Schemes栏,在它下面添加一个key为item0,类型为string,值就填写你这个程序的url,自己起一个喜欢的名字:
通过以上这两步,别的程序就可以在需要的地方调用[[UIApplication sharedApplication] openURL:url];方法去唤醒你这个设置好的程序了(其中url参数就是第2步你刚填写的url值,具体如何构建url下面将会说到)。
当你的程序被别的程序唤醒的时候,会自动执行回调函数,该回调函数为-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
因此如果你想自己的程序在被别的程序唤醒时有所作为,可以在AppDelegate.m文件下
重写该回调函数。
由于这个回调函数只能获取到url,并不够强大,所以系统提供了另外一个回调函数在程序被唤醒的时候也会回调该函数
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
同样也是在AppDelegate.m文件下重写该函数。
通过该函数的参数sourceApplication我们可以得到是哪个项目唤醒我们的项目,它的值就是那个项目的Bundle Identifier。有了这个参数,我们可以根据不同的调用自己程序的程序而做出不同的事情。
参数url可以通过调用[url scheme]获得自己项目的URL Schemes,可以通过调用[url query]获得唤醒我们程序的那个程序传递过来的信息,从而我们可以通过[url query]接收到得信息而做出不同的事情。
以上内容基本为介绍怎么让自己的程序被别的程序唤醒以及唤醒之后要做的事情,接下来将会介绍怎么让自己的程序唤醒已经设置了URL Schemes的项目。
上面提及到唤醒别的程序通过调用[[UIApplication sharedApplication] openURL:url];这个方法,那么重点便是构建这个url参数。最简单的只唤醒程序如app2(app2的URL Schemes比如已经设置为app2Url)只需
NSURL *url=[NSURL URLWithString:@”app2Url:”];
[[UIApplication sharedApplication] openURL:url];
通过这两行代码便可唤醒app2。
那么想在唤醒app2的同时向它传递消息,也是通过url实现,只要构建url通过查询串用?......格式便可让?后面的字符信息传递到app2中,让app2通过[url query]获得?之后的字符信息。构建url的时候需要注意两点:
? 不能有中文
? 不能有空格
不然将会无法唤醒app2。正确的构建url如:
NSURL *url=[NSURL URLWithString:@"app2Url://?name=test?value=123 "];
虽然构建url的那两个要求有点限制,但我们还是可以以key-value形式把数据传递过去的。如这个在被唤醒的项目通过[url query]获得的字符便是:name=test?value=123,我们可以再app2中通过
NSString *urlText=[url query];//获得name=test?value=123存到urlText变量中
NSArray * array= [urlText componentsSeparatedByString:@"?"];让urlText通过字符’?’分割字符串存到数组中,同理再取分割后的数组中的字符串如name=test再按’=’分割,便可得到key为name,value为test的值了。
在被唤醒的程序中返回到原程序的原理和原程序去唤醒别的程序的原理是一样的,也就是先设置原程序的URL Schemes,再在别唤醒的程序中唤醒原程序即可。