最近要在IOS中实现一个应用启动另外一个应用的功能,搜了一些资料,使用UIApplication的openURL:的方法就能实现,现在整理和大家分享一下!

注册自定义URL协议

首先被启动的应用需要向iPhone注册一个自定义URL协议。这是在你的项目文件夹的info.plist文件进行的(就是你改变应用程序图标的同一个文件)。Step1. 右键,选择“Add Row”Step2. Key值选择“URL types”Step3. 打开“Item 0″,然后为该key增加一个URL identifier。可以是任何值,但建议用“反域名”(例如 “com.fcplayer.testHello”)。Step4. 在“Item 0”下再加一行。Step5. 选择“URL Schemes” 作为Key。Step6. 输入你的URL协议名 (例如“testHello://” 应写做“testHello”)。如果有必要,你可以在这里加入多个协议。操作截图如下:

访问自定义URL

在主应用程序中通过访问自定义URL启动另外一个应用:

[csharp] view plain

copy

  1. NSURL * myURL_APP_A = [NSURL URLWithString:@"testHello://"];
  • if

([[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {

  • NSLog(@"canOpenURL"

);

  • [[UIApplication sharedApplication] openURL:myURL_APP_A];
  • }

自定义处理URL

有些时候我们除了启动还需向另外一个应用发送参数,这是也可以通过自定义的URL来实现,如:

testHello://testHello://com.fcplayer.testHellotestHello://config=1&abar=2

这时我们在被启动应用中就必须进行自定义处理,在delegate中实现该消息(Cocos2d加在AppDelegate中),例如:- (BOOL)application:(UIApplication *)applicationhandleOpenURL:(NSURL*)url {   // Do something withthe url here }

通常,我们会从参数中解析出URL以便在视图中显示或者存储到UserPreference。下面的例子把URL存储为User Preference的url变量中或者打印出来:

[csharp]

view plaincopy

  1. -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
  • {
  • if

(!url) {

return

NO; }

  • NSString *URLString = [url absoluteString];
  • NSLog(@"%@"

,URLString);

  • //[[NSUserDefaults standardUserDefaults] setObject:URLString forKey:@"url"];
  • //[[NSUserDefaults standardUserDefaults] synchronize];
  • return

YES;

  • }

其他

基本上至此我们就已经实现一个应用程序中启动另外一个应用的功能,但是为了是我们的代码更加强壮,我在网上又找了一段访问代码,如下:

[csharp]

view plaincopy

  1. // 检查用户是否配置了AppId
  • // 有没有准确配置Info的CFBundleURLSchemes字段
  • // 是不是可以正确打开
  • if

(!kAppId) {

  • UIAlertView *alertView = [[UIAlertView alloc]
  • initWithTitle:@"Setup Error"
  • message:@"Missing app ID. You cannot run the app until you provide this in the code."
  • delegate

:self

  • cancelButtonTitle:@"OK"
  • otherButtonTitles:nil,
  • nil];
  • [alertView show];
  • [alertView release];
  • } else

{

  • // Now check that the URL scheme fb[app_id]://authorize is in the .plist and can
  • // be opened, doing a simple check without local app id factored in here
  • NSString *url = [NSString stringWithFormat:@"fb%@://authorize"

,kAppId];

  • BOOL bSchemeInPlist = NO; // find out if the sceme is in the plist file.
  • NSArray* aBundleURLTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"

];

  • if

([aBundleURLTypes isKindOfClass:[NSArray

class

]] &&

  • ([aBundleURLTypes count] > 0)) {
  • NSDictionary* aBundleURLTypes0 = [aBundleURLTypes objectAtIndex:0];
  • if

([aBundleURLTypes0 isKindOfClass:[NSDictionary

class

]]) {

  • NSArray* aBundleURLSchemes = [aBundleURLTypes0 objectForKey:@"CFBundleURLSchemes"

];

  • if

([aBundleURLSchemes isKindOfClass:[NSArray

class

]] &&

  • ([aBundleURLSchemes count] > 0)) {
  • NSString *scheme = [aBundleURLSchemes objectAtIndex:0];
  • if

([scheme isKindOfClass:[NSString

class

]] &&

  • [url hasPrefix:scheme]) {
  • bSchemeInPlist = YES;
  • }
  • }
  • }
  • }
  • // Check if the authorization callback will work
  • BOOL bCanOpenUrl = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString: url]];
  • if

(!bSchemeInPlist || !bCanOpenUrl) {

  • UIAlertView *alertView = [[UIAlertView alloc]
  • initWithTitle:@"Setup Error"
  • message:@"Invalid or missing URL scheme. You cannot run the app until you set up a valid URL scheme in your .plist."
  • delegate

:self

  • cancelButtonTitle:@"OK"
  • otherButtonTitles:nil,
  • nil];
  • [alertView show];
  • [alertView release];
  • }
  • }

另外还有一段启动其他应用的代码:

[csharp]

view plaincopy

  1. -(IBAction)openMaps {

//打开地图

  • // Where is Apple on the map anyway?
  • NSString* addressText = @”1 Infinite Loop, Cupertino, CA 95014″;
  • // URL encode the spaces
  • addressText =  [addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
  • NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@"

, addressText];

  • // lets throw this text on the log so we can view the url in the event we have an issue
  • NSLog(urlText);
  • [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
  • }
  • -(IBAction)openEmail {//打开mail
  • // Fire off an email to apple support
  • [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://devprograms@apple.com"

]];

  • }
  • -(IBAction)openPhone {//拨打电话
  • // Call Google 411
  • [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8004664411"

]];

  • }
  • -(IBAction)openSms {//打开短信
  • // Text to Google SMS
  • [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://466453"

]];

  • }
  • -(IBAction)openBrowser {//打开浏览器
  • // Lanuch any iPhone developers fav site
  • [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunesconnect.apple.com"

]];

  • }

附参考链接:http://blog.csdn.net/arthurchenjs/article/details/6920631

IOS开发~两个App互相调用

分类: IOS

2013-07-01 20:27

273人阅读 评论(1) 收藏 举报

1、新建两个项目:AppOne,AppTwo;

2、分别在其属性列表中添加如下:

AppOwn:

AppTwo:

3、分别实现代码:

AppOwn的 viewController.m 中添加代码:

- (void

) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

NSURL *url  = [NSURLURLWithString:@"AppTwo:"];

if

([[

UIApplicationsharedApplication] canOpenURL:url])

{

NSLog

(

@"canOpenURL");

[[

UIApplication sharedApplication] openURL:url];

} else

{

NSLog

(

@"can not OpenURL");

}

}

AppTwn的 viewController.m 中添加代码:

- (void

) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

NSLog

(

@"touchesBegan");

NSURL *url  = [NSURLURLWithString:@"AppOne:"];

if

([[

UIApplicationsharedApplication] canOpenURL:url])

{

NSLog

(

@"canOpenURL");

[[

UIApplication sharedApplication] openURL:url];

} else

{

NSLog

(

@"can not OpenURL");

}

}

4、分别运行下两个项目,然后无论把其中一个项目进程杀掉,或者使其进入休眠,都可以通过另一个项目来打开另一个项目。

在IOS应用中打开另外一个应用的解决方案的更多相关文章

  1. 利用openURL,在IOS应用中打开另外一个应用

    在IOS中,实现一个应用启动另外一个应用,使用UIApplication的openURL:方法就可实现,这里以test跳到test02为例.(需要先创建这两个工程) 注册自定义URL协议(在test中 ...

  2. 【IOS】在SDK中打开其他接入应用的解决方案

      在SDK中打开其他接入应用的解决方案 一直以来,在iOS的开发中,在程序中打开另外一个应用是不允许.后来有正义之士用class-dump在私有API中找到了这样的功能.那就是使用UIApplica ...

  3. XamarinSQLite教程Xamarin.iOS项目中打开数据库文件

    XamarinSQLite教程Xamarin.iOS项目中打开数据库文件 以下是打开MyDocuments.db数据库的具体操作步骤: (1)将Mac电脑上的MyDocuments.db数据库移动到W ...

  4. Winforn中怎样在窗体中打开另一个窗体

    场景 在Winform的窗体A中打开另一个窗体B. 实现 //打开新的窗体 CurveCompare cc = new CurveCompare(); cc.Show(); 效果 以上代码的实现参照: ...

  5. iOS开发中遇到的一些问题及解决方案【转载】

    iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Creat ...

  6. iOS 应用中打开其他应用 (转)

    我们来讨论一下,在iOS开发中,如何实现从app1打开app2. 基本的思路就是,可以为app2定义一个URL,在app1中通过打开这个URL来打开app2,在此过程中,可以传送一些参数.下面来讨论一 ...

  7. 【转】【iOS开发】打开另一个APP(URL Scheme与openURL)

    目标 平常我们做iOS开发,会经常遇到打开其他的APP的功能.本篇文章讲的就是打开别人的APP的一些知识.我们的目标是: 打开别人的APP 让别人打开我们的APP iOS9的适配问题 使用URL Sc ...

  8. 【Android开发-8】生命周期,Activity中打开另外一个Activity

    前言:生命中有很多人陪伴自己走过一生中的某段旅程,仅仅是有些人仅仅是某阶段出现,有些人却陪伴自己非常久.就像小学.中学.高中.大学,那些以前以为会长久拥有的,当经历过天涯各地地忙碌于生活,或如意.或失 ...

  9. 在android程序中打开另一个应用程序

    Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用. 一般我们知道了另一个应用的包名和MainActivity的名 ...

随机推荐

  1. 【ASP.NET Core】浅说目录浏览

    何谓“浅说”?就是一句话说不完,顶多两句话就介绍完毕,然后直接给上实例的解说方式.化繁为简,从七千年前到现在,从老祖宗到咱们,一直都在追求的理想目标,尽可能把复杂的东西变成简单的. 老周告诉你一个可以 ...

  2. 人人网框架导入uidGenerator的ID生成方式

    人人网框架导入uidGenerator的ID生成方式 2019-03-11 LIUREN    SpringBoot2.0  uidGenerator  SpringBoot2.0  uidGener ...

  3. python3 + flask + sqlalchemy +orm(3):多对多关系

    一篇文章有多个tag,一个tag也可以属于多篇文章,文章和tag存在多对多关系 config.py DEBUG = True #dialect+driver://root:1q2w3e4r5t@127 ...

  4. Session 在分布式系统中实现方式

    ##server独立Session 例如以下图所看到的: server独立Session要求用户的每次请求都必须在同一台应用server上面操作,这就要求负载均衡server每次都能把用户的请求发送到 ...

  5. 数字签名与HTTPS详解

    因为HTTP协议本身存在着明文传输.不能很好的验证通信方的身份和无法验证报文的完整性等一些安全方面的确点,所以才有了HTTPS的缺陷.HTTPS确切的的说不是一种协议,而是HTTP + SSL (TS ...

  6. 安全工具-Arachni

    Arachni是一个多功能.模块化.高性能的Ruby框架,旨在帮助渗透测试人员和管理员评估web应用程序的安全性.同时Arachni开源免费,可安装在windows.linux以及mac系统上,并且可 ...

  7. ffmpeg中AVBuffer的实现分析

    [时间:2017-10] [状态:Open] [关键词:ffmpeg,avutil,avbuffer, 引用计数] 0 引言 AVBuffer是ffmpeg提供的基于引用计数的智能指针的一个实现版本. ...

  8. 电子商务(电销)平台中订单模块(Order)数据库设计明细(转)

    以下是自己在电子商务系统设计中的订单模块的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 订单表 (order)|-- 自动编号(order_id, 自增长主键)|-- 订单单号( ...

  9. win10 安装node.js node.js 安装成功但npm -v 报错问题解决

    错误症状官网下载node-v8 .node-v10 的msi 安装进行安装. npm -v 错误如下 0 info it worked if it ends with ok 1 verbose cli ...

  10. 一个tomcat服务器上部署多个Web项目,不同域名访问

    [参考]一个tomcat服务器上部署多个项目,不同域名访问 我们一个服务器只按装了一个tomcat服务器,现在有多个项目或者多个域名访问,下面来进行配置 在这里我们只需要修改conf下的server. ...