iOS 如何在一个app中调用另一个app

标签: ios app app | 发表时间:2012-02-27 20:06 | 作者:sql_help
出处:http://blog.csdn.net

原则上iOS的沙箱原理,是阻止一个app去访问其他app的资源乃至是系统底层的资源的

但是我们可以通过一种变相的方式:通过对应的URL模式和其他程序进行通讯

在大多数情况下,URL只是用于简单地启动一个应用程序并显示一些和调用方有关的信息。举例来说,对于一个用于管理地址信息的应用程序,您就可以在发送给它的URL中包含一个Maps程序可以处理的地址,以便显示相应的位置。这个级别的通讯为用户创造一个集成度高得多的环境,减少应用程序重新实现设备上其它程序已经实现的功能的必要性。

苹果内置支持 httpmailtotel、和 sms这些URL模式,还支持基于 http的、指向Maps、YouTube、和iPod程序的URL。应用程序也可以自己注册定制的URL模式。您的应用程序可以和其它应用程序通讯,具体方法是用正确格式的内容创建一个 NSURL对象,然后将它传给共享 UIApplication对象 openURL:方法。 openURL:方法会启动注册接收该URL类型的应用程序,并将URL传给它。当用户最终退出该应用程序时,系统通常会重新启动您的应用程序,但并不总是这样。系统会考虑用户在URL处理程序中的动作及在用户看来返回您的应用程序是否合理,然后做出决定。

开始我们的旅程:

1.注册定制的URL模式

在为您的应用程序注册URL类型时,必须指定 CFBundleURLTypes属性的子属性

CFBundleURLName

这是个字符串,表示URL类型的抽象名。为了确保其唯一性,建议您使用反向DNS风格的标识,比如 com.acme.myscheme

这里提供的URL类型名是一个指向本地化字符串的键,该字符串位于本地化语言包子目录中的 InfoPlist.strings文件中。本地化字符串是人类可识别的URL类型名称,用相应的语言来表示。

CFBundleURLSchemes

这是个URL模式的数组,表示归属于这个URL类型的URL。每个模式都是一个字符串。属于指定URL类型的URL都带有它们的模式组

编辑 Info.plist文件。请看下图,左列中的URL类型入口相当于您直接加入到Info.plist文件的 CFBundleURLTypes键。类似地,“URL identifier”和“URL Schemes”入口相当于 CFBundleURLNameCFBundleURLSchemes



2.处理URL请求

应用程序委托在 application:handleOpenURL:方法中处理传递给应用程序的URL请求。如果您已经为自己的应用程序注册了定制的URL模式,则务必在委托中实现这个方法。

下面代码实现了这个委托方法;

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    if ([[url scheme] isEqualToString:@"callapp"]) {
        
        [application setApplicationIconBadgeNumber:10];
        
        return YES;
    }
    
    return NO;
}


3.测试外部调用

  1. 回到Home屏幕,启动Safari(在iPhone仿真器上,在菜单上选择Hardware > Home命令就可以回到Home屏幕)。

  2. 在Safari的地址栏中,键入使用定制模式的URL:callapp://justdoit

  3. 确认您的应用程序是否启动,以及应用程序委托是否收到 application:handleOpenURL:消息。

4.app中调用

下面展示了一个程序如何请求另一个程序提供的服务(假定这个例子中的“callapp”是由应用程序注册的定制模式):

NSURL *myURL = [NSURL URLWithString:@"callapp://justdoit"];
[[UIApplication sharedApplication] openURL:myURL];



作者:sql_help 发表于2012-2-27 20:06:00 原文链接
阅读:1 评论:0 查看评论

相关 [ios app app] 推荐:

iOS Web App初步

- - 新浪UED
iOS Web App开发,配合HTML5,是目前比较热门的话题. 今天,先抛开HTML5,我们来尝试在PhoneGap框架上进行简单的开发. PhoneGap是一个使用HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台. 它使开发者能够利用iPhone,Android,Palm,Symbian,WP7,Bada和Blackberry等智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等,此外PhoneGap拥有丰富的插件,可以以此扩展无限的功能.

[IOS]iOS App性能优化

- - 操作系统 - ITeye博客
iOS App的性能关注点. 虽然iPhone的机能越来越好,但是app的功能也越来越复杂,性能从来都是移动开发的核心关注点之一. 我们说一个app性能好,不是简单指感觉运行速度快,而应该是指应用启动快速、UI反馈响应及时、列表滚动操作流畅、内存使用合理,当然更不能随随便便Crash啦. 工程师开发应用时除了在设计上要避免性能“坑”的出现,在实际遇到“坑”时也要能很快定位原因所在.

iOS APP体验设计

- wuwu - 彩程团队BLOG
iOS APP体验设计不像互联网的体验设计那样,有一堆的方法论和可以“借鉴”的案例. 目前除了苹果的和前Palm的外,没有找到更好的设计哲学和方法论. 事实上,即便认真地研读了HIG和Zen of Palm,甚至是Oolon Colluphid的哲学巨作你也无法严格按照Guideline设计出一款出色的APP.

iOS App体验设计

- 志飞 - 36氪
编者按:本文来自成都彩程设计的CTO肖轶翔「@yxshawn」,关注「iOS,人机交互,UED,音乐人,多媒体,哲学,科幻,电子,迷幻」. 他在文中对iOS 应用和普通网站设计进行了对比,并提出了自己的设计理念. iOS APP体验设计不像互联网的体验设计那样,有一堆的方法论和可以“借鉴”的案例. 目前除了苹果的和前Palm的外,没有找到更好的设计哲学和方法论.

iOS App开发那些事

- - IT江湖
自从做Team Leader之后,身上权责发生了变化,于是让我烦恼的不再是具体某个功能,某个界面的实现,而是如何在现有代码的基础上做渐进式的改进,创造出比较合适规范和框架,使得组内成员更快更好地完成任务. 一年下来,颇有点想法,于是啰嗦几句关于iOS App开发的那些事. 首先明确一点,合适的人是指纯技术团队的建设.

The Right Way to Architect iOS App with Swift

- - limboy's HQ
关于 iOS 架构的文章感觉已经泛滥了,前一阵正好 Android 官方推了一套. App Architecture ,于是就在想,对于 iOS 来说,怎样的架构才是最适合的. 这是第一个也是最重要的问题,为什么会出现各种 Architecture Pattern. 我们来想一下,无论是做一个 App 还是搭一套后台系统,如果是一次性的,今天用完明天就可以扔掉,那么怎么快怎么来,代码重复、代码逻辑、代码格式统统不重要.

iOS 如何在一个app中调用另一个app

- - CSDN博客推荐文章
原则上iOS的沙箱原理,是阻止一个app去访问其他app的资源乃至是系统底层的资源的. 但是我们可以通过一种变相的方式:通过对应的URL模式和其他程序进行通讯. 在大多数情况下,URL只是用于简单地启动一个应用程序并显示一些和调用方有关的信息. 举例来说,对于一个用于管理地址信息的应用程序,您就可以在发送给它的URL中包含一个Maps程序可以处理的地址,以便显示相应的位置.

iOS App 推广网站汇总

- Han - 马健 Jerry Ma 专注于产品设计,让生活更简单
   App 是靠推出来的,就算再好的项目,再好的创意,也少不了推广为之提高知名度. 下面就是 CocoaChina 版主 “angellixf” 分享的一批相对靠谱的 iOS App 推广网站,大部分为国外站点.     另外,要收集国外的 App 推广网站,可以找一个热卖的应用,直接 Google 它的名字,为这款应用写过推荐的网站不就全出来了.