在iOS开发中,在很多情况下我们需要完成应用之间的文档共享。然而,iOS为应用提供的是一个运行沙箱,一个应用程序无法直接和另一个应用程序通讯,所以应用之间如果要共享文档的话需要通过一些系统提供的应用交互手段。
iOS应用程序之间交互的一个简单手段是“URL Scheme”,就是通过UIApplication的openURL方法,使用“<应用名>://”这样的URL形式指定应用,同时可以在URL中加入一些类似于http的get请求的参数,用于传递简单数据,代码样例如下:
以上代码会启动应用“myapp”,然后传递参数token和user给应用myapp。
不过这种应用调用无法完成应用间文档共享,这能完成一些简单的数据传递。有关“URL Scheme”的具体使用可以参考iOS官方样例中的LaunchMe。
为了给其它应用程序共享文档,发起共享的应用一般使用的是UIDocumentInteractionController类,通过调用该类实例的presentOpenInMenuFromRect方法显示一个“OpenIn”菜单,该菜单中会显示系统中声明可以支持你所共享的文档的应用图标,由用户选择使用那个应用打开你共享的应用。
下面是一段代码样例,该样例通过UIDocumentInteractionController的interactionControllerWithURL方法创建了一个UIDocumentInteractionController实例,然后调用该实例的presentOpenInMenuFromRect方法显示“OpenIn”菜单。
NSString *filePath =
[[NSBundle mainBundle]
pathForResource:@"PDF Document" ofType:@"pdf"];
NSLog(@"file path is: %@", filePath);
self.documentController =
[UIDocumentInteractionController
interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];
self.documentController.delegate = self;
self.documentController.UTI = @"com.adobe.pdf";
[self.documentController presentOpenInMenuFromRect:CGRectZero
inView:self.view
animated:YES];
将以上代码放置到一个控件对应的action方法中,触发该控件就会让系统弹出“OpenIn”菜单,有用户选者使用什么程序打开你所共享的应用。
注意,在“OpenIn”菜单中会出现所有声称支持对应文档类型的应用,比如上例中的“OpenIn”菜单中会出现所有“声称”支持pdf格式的应用图标,至于用户选择哪个应用,所选择的应用是否真的可以正常处理pdf文档是我们无法控制的。
为了使用其它应用程序共享的文档,接受文档的应用需要完成两个工作。
第一个工作是在应用的Info.plist中加入声明,声明该程序支持什么文档格式。比如你需要支持pdf文档,就可以在你的应用项目配置界面选择“Info”页面的“Document types”区段,在里面加入pdf文档类型的配置,如下图:
第二个工作是接受其它程序共享的数据,正常做法是在应用的openURL方法中加入响应代码,在该代码中去访问参数URL中纪录的文档,该URL指向本应用Documents目录中的inbox目录中的一个文件,该文件就是其它程序共享的文档的一个拷贝。具体代码如下:
- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"openURL method was called");
NSLog(@"the source application is: %@", sourceApplication);
NSLog(@"url is: %@", url);
NSLog(@"handle the file in above file path for the shared doc");
return YES;
}
以上openURL方法通过控制台打印了打印了共享文档的应用名称和所共享的文档在本应用中的访问路径,通过这个访问路径开发人员可以在本应用中访问到其它应用所共享的文档。
分享到:
相关推荐
超越Xcode应用程序开发的基础,实现共享按钮和活动视图控制器等工具,与其他用户和其他设备共享文档内容,包括部分文档。这本书填补了这一空白,这样即使有iOS和Swift基础知识的开发人员也可以在他们的应用程序中...
您可以在 iOS 创建什么应用程序? 9 如何使用参考库? 9 Cocoa Touch 层 12 高级特性 12 多任务 12 数据保护 13 苹果推送通知服务 13 本地通知 14 手势识别器 14 文件共享支持 14 点对点服务 15 标准系统视图控制器 ...
Camera-Preview:一个iOS应用程序,可在屏幕上显示相机而不会显示干扰的UI。 设计用于将iPhone屏幕作为文档摄像头共享
Nextcloud是一个可靠、安全的协作平台,将文件共享、视频聊天、电子邮件、任务管理和实时文档协作整合到一个集成界面下。 在不牺牲隐私的情况下享受效率和舒适性。Nextcloud 将您的数据保存在您的控制区域内,并为您...
利用OpenCV2矩形识别+裁剪(拍照识别、文档识别),,并对区域内容纠偏和裁剪,并参照iOS系统VisonKit自动识别文档矩形区域,实现放大镜效果 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站...
react native fbsdk是ios facebook sdk和android facebook sdk的包装,允许在react native apps中集成facebook。从登录到共享,对本机组件的访问完全通过文档化的javascript模块提供,因此您不必直接调用单个本机...
一个简单的无服务器node.js应用程序,用于接收来自iOS应用程序的收据斑点,转发给Apple进行验证,然后返回解码结果。 这就像Web服务一样简单,我们可以根据Apple建议用来验证收据的文档来召集需要做的事情。 它...
使用iCloud文档存储在多个应用程序目标和平台之间共享内容。 使用应用程序组在单个设备上的应用程序和扩展之间共享本地内容。 创建应用程序扩展以提供Today窗口小部件和Watch应用程序。 定义一个框架以在多个...
适用于iOS的Branch SDK文档查看
有些东西甚至可能在 JS 中有很好的文档记录,但在本机实现中却没有。 我们致力于尽快改进和扩展该项目的功能,并期待与社区合作。 React本机 我们的第一个 React Native 实现是ReactKit ,针对 iOS。 我们还在开发 ...
使用Swift开发iOS 8应用 iTunes U课程地址: CS193P课程地址: 相关链接 翻译进度 翻译已完成完成,如果您发现字幕有什么不妥,欢迎提Pull Request。 校对规则 请参见项目内文档:。 字幕下载 直接点击进行全部现有...
通过引入紧凑的按钮,iVim在其扩展键盘中覆盖了尽可能多的键,因此您可以输入符号而无需在键组之间进行切换。 此外,您可以自定义它以满足您自己的特殊需求。 多阶段语言输入 iVim增加了对多级输入语言(例如中文或...
有些东西甚至可能在 JS 中有很好的文档记录,但在本机实现中却没有。 我们致力于尽快改进和扩展该项目的功能,并期待与社区合作。 React本机 我们的第一个 React Native 实现是ReactKit ,针对 iOS。 我们还在开发...
利斯特 ... 使用 iCloud 文档存储在多个应用程序目标和平台之间共享内容。 使用应用程序组在单个设备上的应用程序和扩展程序之间共享本地内容。 创建应用扩展以提供今日小部件和观看应用。 定义一个
简化手机和平板电脑与PC / Mac的连接,支持您在Android,iOS和Windows操作系统之间共享任何文件。 ☆智能手机复制 智能开关移动数据,如联系人,短信,图片,音乐,视频,游戏和任何其他文件,从您的旧手机到新的一...
,开始在Trovebox上构建应用程序的文档。 ,Trovebox中不同对象的外观说明(即照片或评论)。 ,详细指南可帮助您在各种系统上安装Trovebox软件。 Trovebox如何运作? Trovebox的工作方式与Flickr,Smugmug和...
React Native FBSDK是iOS Facebook SDK和Android Facebook SDK的包装,允许将Facebook集成到应用程序中。 完全通过文档化JavaScript模块提供对从登录到共享的本机组件的访问,因此您不必直接调用单个本机函数。 ...
在1.1.4.2版本中,它提供了一系列的功能和优化,方便开发者进行跨平台应用的开发。 1. 跨平台开发:利用uni-app框架,开发者可以使用一套代码,编译到多个平台,包括iOS、Android、H5、以及各种小程序。 2. 组件...
保养一旦我们确定需要在我们的应用程序之间共享组件,该库就会不断更新并添加新功能。 新功能已添加为一个,并标记为[Spec] 。 我们对遵循语义版本控制。贡献该库将由DIPS AS维护,但始终欢迎公众做出贡献。 请参阅...