AirDrop概览

AirDrop是iOS 7引入的一项新功能,iCloud同步功能允许在用户的两台iOS设备之间分享照片和文档,而AirDrop可以在不同用户的iOS设备之间进行照片和文档的分享。
在iOS 7之前,iOS用户主要依靠第三方app实现iOS设备间的文件和数据分享,在iOS 7中,该项新功能适用于所有iPhone 5、iPad 4、iPad mini以及第五代iPod touch设备。通过AirDrop,你可以与附近其他iOS app分享照片、视频、通讯录、URL、Passbook passes、App Store上的app列表、iTunes Store中的媒体列表以及地图中的位置信息等等。
苹果在iOS 7 SDK中集成了UIActivityViewController类,可以让你很简单地就能把AirDrop功能整合进app中。UIActivityViewController类封装了文件分享功能的细节。你所需要的就是告知这个类你希望分享的内容,以及处理的结果。在这个教程中,我们将会演示UIActivityViewController的使用方法,以及你该如何使用AirDrop来分享图片/文档。
AirDrop使用蓝牙来扫描周围的设备,当两台设备通过蓝牙建立起了连接,考虑到更快速的数据传输,它就会创建点对点的Wi-Fi网络来连接两部iOS 设备。但并不意味着为了使用AirDrop而需要把设备连接至Wi-Fi网络。
比如你想在iPhone拍照类app中将照片分享给另一位iPhone设备,假如你在两台设备间启动了AirDrop,点击屏幕左下角的分享按钮就能实现不同用户iOS 设备间的文件分享。当屏幕处于关闭状态时,AirDrop为不可用,所以要确保文件接收方的设备处于打开状态,然后选择设备进行分享。在另一台设备上,你会看到照片预览和确认要求。接收者可以接受或者拒绝接收文件。如果你选择了接收,照片会被传输至你的iOS设备,并保存至相册。
AirDrop并不仅仅适用于拍照类app,你也可以在大部分内置的应用中看到它,比如Contacts, iTunes, App Store, Safari以及其他应用程序中。
下面我们来看看如何把AirDrop整合进你的app。
UIActivityViewController简介快览
可能有开发者会觉得在应用中整合AirDrop比较麻烦,其实只需要数行代码就能实现,UIActivityViewController让这个过程变得非常简单,因为AirDrop是该类固定的一部分。
UIActivityViewController类是一个标准的view controller,提供了几项标准的服务,比如复制项目至剪贴板,把内容分享至社交网站,以及通过Messages发送数据等等。在iOS 7 SDK中,UIActivityViewController类提供了内置的AirDrop功能。
如果你有一些数据一批对象需要通过AirDrop进行分享,你所需要的是通过对象数组初始化UIActivityViewController,并展示在屏幕上:
  1. UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
  2. [self presentViewController:controller animated:YES completion:nil];
如上代码所示,只需要两行代码,你就能通过AirDrop选项启用activity view。当检测到周围的设备时,activity controller会自动展示在设备上,并处理数据转换(如果你选择了该项)。
根据需要,你可以拒绝特定的分享类型,也就是说,你可以通过排除所有的活动仅展示通过AirDrop进行分享。如下代码所示:
  1. UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
  2. NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook,
  3. UIActivityTypePostToWeibo,
  4. UIActivityTypeMessage, UIActivityTypeMail,
  5. UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
  6. UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
  7. UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,
  8. UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];
  9. controller.excludedActivityTypes = excludedActivities;
  10. [self presentViewController:controller animated:YES completion:nil];
现在activity view controller仅展示AirDrop选项:
你可以通过UIActivityViewController来分享不同的数据类型,包括NSString, UIImage以及NSURL。你不仅可以使用NSURL分享链接,也可以通过URL传递任何类型的文件。
在接收端,当其他设备接收数据时,它会基于数据类型自动打来app。也就是说,如果传送的是UIImage时,被接收的图片会展示在拍照类app中。当传递的是PDF文件时,其他设备会在Safari中打开它。如果你仅仅分享NSString object,数据将会被展示在Notes app中。
AirDrop Demo App介绍
现在我们创建一个AirDrop demo app来帮你更好地理解UIActivityViewController和AirDrop。这个示例app非常简单,当首次启动,你会看到罗列了几个文件的表格视图,包括图片文件、PDF文件以及文本文件,你可以点击文件并查看内容。在content view中,会看到一个屏幕右上角有一个操作按钮。点击按钮将启用AirDrop选项,并且你可以与周围设备分享图片或者文档。
你可以从头开始做这个app,但是为了节省时间,你可以下载这个项目模板来试验。打开Xcode project,你会发现下边这个Storyboard:
这个示例app已经执行了ListTableViewController和DocumentViewController。如果编译并运行这个app,你会发现一个文件列表。点击任何一个文件,图片或者文档内容将会展示出来。但是分享按钮并没有被执行,这也是我们将要讨论的一点。
添加AirDrop功能
在工程模板中,ListTableViewController被用来在表格视图中展示文件列表,而DocumentViewController则通过web view来展示文档内容。document view中的操作按钮和DocumentViewController的share: method有关。该方法的实现如下所示:
  1. - (IBAction)share:(id)sender {
  2. NSURL *url = [self fileToURL:self.documentName];
  3. NSArray *objectsToShare = @[url];
  4. UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
  5. // Exclude all activities except AirDrop.
  6. NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook,
  7. UIActivityTypePostToWeibo,
  8. UIActivityTypeMessage, UIActivityTypeMail,
  9. UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
  10. UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
  11. UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,
  12. UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];
  13. controller.excludedActivityTypes = excludedActivities;
  14. // Present the controller
  15. [self presentViewController:controller animated:YES completion:nil];
  16. }
这个代码非常熟悉,我们在最开始的时候已经讨论过了,它可以用来简单地创建UIActivityViewController,排除所有分享功能(AirDrop除外),并作为模态视图展示出控制器。棘手的部分是如何定义分享的对象。下边我们将会把分享文件转换成NSURL object,并把文件URL作为数组传递给AirDrop。
头两行代码是关于file URL转换的。documentName属性存储了当前文件(比如ios-game-kit-sample.pdf),展示在document view中。我们通过文档名称和它返回的相应的file URL,来简单地调用fileToURL: method。fileToURL: method已经在工程模板中,代码如下:
  1. - (NSURL *) fileToURL:(NSString*)filename
  2. {
  3. NSArray *fileComponents = [filename componentsSeparatedByString:@"."];
  4. NSString *filePath = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1]];
  5. return [NSURL fileURLWithPath:filePath];
  6. }
这些代码非常简洁明了,比如ios-game-kit-sample.pdf将会被转换为file:///Users/simon/Library/Application
%20Support/iPhone%20Simulator/7.0.3/Applications/A5321493-318A-4A3B-8B37-E56B8B4405FC/AirDropDemo.app/ios-
game-kit-sample.pdf.
file URL依据你运行的设备而变化,但是URL应该以“file://”协议开头。通过file URL object,我们创建了相应的数组,并把它传递给UIActivityViewController以用来进行AirDrop分享。
编译并运行AirDrop demo
做完这些后,编译并在iPhone上运行这个app。
注意:你需要一个真实的设备来测试AirDrop分享。不能在模拟器上进行分享。
Uniform Type Identifiers (UTIs)统一标示符(UTIs)
当你把图片分享之其他iOS设备,接收方会自动打开拍照类app并加载图片。如果你传递的是PDF文件,接收方设备可能会提示你选择一个app来打开文件,或者直接在iBooks中打开。iOS是如何知道哪个app适合什么样的数据类型呢?
在系统中,苹果用UTIs来处理数据类型的标示。简单的说,一个uti是用来标示特定类型的数据或文件。例如,com.adobe.pdf标示一个pdf文件,而public.png代表一个PNG图片。在这里可以查看已经在系统中注册了的完整的UTIs清单。(love cc cat)应用程序可以打开在iOS系统中已经注册了的UTI。因此无论文件是否被打开,iOS都会用特定的程序打开这个文件。
系统允许多个程序注册相同的UTI。在这个教程中,iOS将通过app列表打开文件。比如,当你分享PDF文档时,你可以在接收端设备上看到如下屏幕:
总结
AirDrop是iOS 7引入的一个非常酷的功能,它为iOS设备间数据分享提供了一个很好的方法。首先,内置的UIActivityViewController类使得开发者在应用中实现该功能变得非常简单。正如你所看到的demo app,它仅仅需要几行代码就能实现。所以推荐开发者在应用中实现该功能

[绍棠] 如何为iOS app添加AirDrop文件分享功能相关推荐

  1. android 将app添加进入文件的打开方式

    今天,简单讲讲android里如何将自己的app添加进入文件的打开方式. 最近因为换租房的原因,状态很不好.今天尝试写点android的代码的内容.其实很简单,我们只需在AndroidManifest ...

  2. 直播视频app源码的分享功能,是这样实现的

    直播视频app源码拥有大量的用户和直播内容,为了方便用户分享平台内容,直播视频app源码实现了分享到第三方的功能,下面就是直播视频app源码实现分享功能的代码. <!doctype html&g ...

  3. iOS App添加扩展App Extension

    主要参考文章 :  https://www.cnblogs.com/fengmin/p/6118592.html demo地址,里面额外添加了一个分享的扩展 :  https://github.com ...

  4. 为 iOS APP 添加手机密码、指纹验证

    2019独角兽企业重金招聘Python工程师标准>>> 原文  http://my.oschina.net/u/2340880/blog/542221?fromerr=fpdpdLP ...

  5. iOS App提交被拒理由分享汇

    参考文献:http://www.zhihu.com/question/20255638 iOS 移动开发者们,亲身收到过哪些 App 提交被拒的原因? 娱乐分类App,拒绝理由:我们认为你的App不具 ...

  6. 萤石云好友分享的监控怎么看_助力开学季丨萤石云APP新增群组分享功能、扩容优惠套餐!...

    开学季 萤石云新功能上线 又是一年忙碌充实的开学季,小小少年们又回到了学校,萤石幼儿园校长却多了份幸福的烦恼:宝爸宝妈们都想看自家孩子的上课录像,可每次只能跨过班主任直接向校长申请:小班的同学座位升到 ...

  7. Android——App内文件分享功能

    国内的Android开发者,在遇到App内有分享功能时,基本都是对接友盟分享.ShareSDK分享等第三方SDK.简单的集成SDK以及配置之后,即可分享至多个不同App平台.反而很少来使用Androi ...

  8. js生成二维码,web页面,移动h5页添加微信qq分享功能

    js文件 qrcode.js 代码 /*from tccdn minify at 2014-6-4 14:59:43,file:/cn/c/c/qrcode.js*/ /*** @fileovervi ...

  9. vue单应用在ios系统中实现微信分享功能

    表示是第一次使用vue做单应用显目,也是在逐渐的摸索中~更是各种踩坑,各种填坑,打算写博客么?是因为不想写笔记了,嗯嗯 就是这么简单 进入正题. 刚开始做微信分享的这个功能的时候,脑补了官方文档微信J ...

  10. 跑步App(室内+室外+分享功能)

    RunStone an android application for record your run data App主要分为两种模式,分别为indoor室内,与outdoor室外模式. 室内模式通 ...

最新文章

  1. taskscheduler java_java – 针对不同任务的不同taskScheduler
  2. 工作97:父子组件传值
  3. 注意力测试软件系统,儿童注意力训练评估软件 - 训练评估软件 - 唯普诺心理,心理测评系统,心理测评软件,婴幼儿智能发育,心理软件...
  4. (PPT)Linux服务器基础
  5. php怎麼用jabber,class.jabber
  6. vue的介绍-基本语法
  7. 根文件系统的构建与分析(一)之流程分析 http://blog.csdn.net/jianchi88/article/details/7682901
  8. AT89S52单片机学习第一天
  9. visual studio 中鼠标光标的切换(或鼠标光标变成阴影方块)
  10. 关于华为云短信接口对接问题
  11. 40st-m00330 型伺服电机STM32单片机PWM脉冲控制
  12. [ISUX转译]iOS 8人机界面指南(一):UI设计基础
  13. LM321 低功耗单运算放大器 1MHZ增益带宽积 用于充电器 适配器
  14. 通过代理使用远程桌面(Mstcs)(转载)
  15. 异或和同或运算之间的等价关系
  16. 倍投计算机器在线,2021看图开特马50研究计算倍投【欢迎你】
  17. VGA显示模式及相关参数
  18. 基于《狂神说java》GUI编程--学习笔记
  19. w7服务器搭建网站教程,w7系统下的云服务器搭建教程
  20. 信捷XC PLC与3台西门子V20变频器通讯程序 原创可直接用于生产的程序

热门文章

  1. Windows 下Maven安装配置(本地仓库配置)
  2. 圈点2006年的省级卫视
  3. 在VM14中建立Win10虚拟机并实现与宿主机的互联
  4. python菜鸟教程python基础教程
  5. 用eclipse创建Java项目(以一个初学者的角度全面教学)
  6. 奔驰北京工厂两年内将再投产三款电动车;希尔顿中国市场第300家酒店开业 | 美通企业日报...
  7. mysql联合查询怎么去重_MySql 联合查询
  8. 黑苹果intel 9560ac网卡成功驱动,无需换卡
  9. python ppt表格样式展示
  10. C# 设置PPT的表格样式